js正規表示式例項(整理)

風的王子發表於2013-11-06
匹配結尾的數字 
來源:如何用JAVASCRIPT 正規表示式取出字串最後一組數字,謝謝 
如 
30CAC0040 取出40 
3SFASDF92 取出92 
正則如下://d+$/g 
 
統一空格個數 
來源:正則匹配空格的問題 
字串內字元鍵有空格,但是空格的數量可能不一致,通過正則將空格的個數統一變為一個。 
例如:藍色理想 
變成:藍色理想 
aobert的正則: 
<script> 
var str="藍色理想" 
var reg=//s+/g 
str = str.replace(reg," ") 
document.write(str) 
</script> 
 
判斷字串是不是由數字組成 
來源:有沒有簡單的方法判斷字串由數字組成? 
這個正則比較簡單,寫了一個測試 
<script type="text/javascript"> 
function isDigit(str){ 
var reg = /^/d*$/; 
return reg.test(str); 

var str = "7654321"; 
document.write(isDigit(str)); 
var str = "test"; 
document.write(isDigit(str)); 
</script> 
 
電話號碼正則 
來源:想問一下關於電話號碼的正則判斷 
:求一個驗證電話號碼的JS正則 
/^/d{3,4}-/d{7,8}(-/d{3,4})?$/ 
區號必填為3-4位的數字,區號之後用“-”與電話號碼連線 
^/d{3,4}- 
電話號碼為7-8位的數字 
/d{7,8} 
分機號碼為3-4位的數字,非必填,但若填寫則以“-”與電話號碼相連線 
(-/d{3,4})? 
 
手機號碼正規表示式 
正則驗證手機號,忽略前面的0,支援130-139,150-159。忽略前面0之後判斷它是11位的。 
cloeft的正則: 
/^0*(13|15)/d{9}$/ 
^0*匹配掉開頭任意數量的0。 
由於手機號碼是13任意數字9位,和15任意數字9位,所以可以用(13|15)/d{9}匹配。 
測試程式碼如下: 
function testReg(reg,str){ 
return reg.test(str); 

var reg = /^0*(13|15)/d{9}$/; 
var str = '13889294444'; 
var str2 = '12889293333'; 
var str3 = '23445567'; 
document.write(testReg(reg,str)+'<br />'); 
document.write(testReg(reg,str2)+'<br />'); 
document.write(testReg(reg,str3)+'<br />'); 
 
使用正規表示式實現刪除字串中的空格: 
來源:請問JS中有沒有去掉空格的函式 
程式碼以及測試程式碼如下: 
<script type="text/javascript"> 
//刪除字串兩側的空白字元。 
function trim(str){ 
return str.replace(/^/s+|/s+$/g,''); 

//刪除字串左側的空白字元。 
function ltrim(str){ 
return str.replace(/^/s+/g,''); 

//刪除字串右側的空白字元。 
function rtrim(str){ 
return str.replace(//s+$/g,''); 

//以下為測試程式碼 
var trimTest = " 123456789 ";//前後各有一個空格。 
document.write('length:'+trimTest.length+'<br />');//使用前 
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');//使用ltrim後 
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');//使用rtrim後 
document.write('trim length:'+trim(trimTest).length+'<br />');//使用trim後 
</script> 
測試的結果如下: 
length:11 
ltrim length:10 
rtrim length:10 
trim length:9 
 
限制文字框只能輸入數字和小數點等等 
來源:文字框輸入限制的問題???? 
只能輸入數字和小數點 
var reg = /^/d*/.?/d{0,2}$/ 
開頭有若干個數字,中間有0個或者一個小數點,結尾有0到2個數字。 
只能輸入小寫的英文字母和小數點,和冒號,正反斜槓(:.//) 
var reg = /[a-z/.////:]+/; 
a-z包括了小寫的英文字母,/.是小數點,//和//分別是左右反斜線,最後是冒號。整個組成一個字元 
集和程式碼任一均可,最後在加上+,1或者多個。 
 
替換小數點前內容為指定內容 
來源:求一正規表示式! 
請問怎麼把這個字串的小數點前面的字元替換為我自定義的字串啊? 
例如:infomarket.php?id=197 替換為test.php?id=197 
應該可以把第一個點“.”之前的所有單詞字元替換為test就可以了。我寫的正則如下: 
<script type="text/javascript"> 
var str = "infomarket.php?id=197"; 
var reg = /^/w*/ig; 
//匹配字串開頭的任意個單詞字元 
str = str.replace(reg,'test'); 
document.write(str); 
</script> 
原帖的有點複雜,沒太看明白。 
 
只匹配中文的正規表示式 
來源:關於上傳的時候,只能選擇中文名稱的圖片(是否可以用TOASCII方法呢?) 
前兩天看的《JavaScript開發王》裡恰好有中文的unicode範圍,正則如下: 
/[/u4E00-/u9FA5/uf900-/ufa2d]/ 
寫了一個簡單的測試,會把所有的中文替換成“哦”。 
<script type="text/javascript"> 
var str = "有中文?and English."; 
var reg = /[/u4E00-/u9FA5/uf900-/ufa2d]/ig; 
str = str.replace(reg,'哦'); 
document.write(str); 
</script> 
 
返回字串的中文字元個數 
來源:有沒返回中文字元位元組的函式! 
一般的字元長度對中文和英文都是不分別的如JS裡的length,那麼如何返回字串中中文字元的個數 
呢?guoshuang老師在原帖中給出瞭解決方案,我又沒看懂…… 
不過我自己也想到了一個辦法:先去掉非中文字元,再返回length屬性。函式以及測試程式碼如下: 
<script type="text/javascript"> 
function cLength(str){ 
var reg = /[^/u4E00-/u9FA5/uf900-/ufa2d]/g; 
//匹配非中文的正規表示式 
var temp = str.replace(reg,''); 
return temp.length; 

var str = "中文123"; 
document.write(str.length+'<br />'); 
document.write(cLength(str)); 
</script> 
結果: 
52 
中文兩個,數字三個,正確。 
下面的測試也正確。 
var str = "中文123tets@#!#%$#[][{}"; 
document.write(str.length+'<br />'); 
document.write(cLength(str)); 
 
正規表示式取得匹配IP地址前三段 
來源:如何用正則取IP前3段 
192.168.118.101,192.168.118.72, 192.168.118.1都替換成:192.168.118 
只要匹配掉最後一段並且替換為空字串就行了,正則如下: 
//./d{1,3}$/ 
匹配結尾的.n,.nn或者.nnn。 
測試程式碼如下: 
function replaceReg(reg,str){ 
return str.replace(reg,'') 

var reg = //./d{1,3}$/; 
var str = '192.168.118.101'; 
var str2 = '192.168.118.72'; 
var str3 = '192.168.118.1'; 
document.write(replaceReg(reg,str)+'<br />'); 
document.write(replaceReg(reg,str2)+'<br />'); 
document.write(replaceReg(reg,str3)+'<br />'); 
相似的有,這個帖子裡有一個驗證IP地址的方法:求檢驗MAC地址的正則表達例子 
 
匹配<ul>與<ul>之間的內容 
來源:請教個正則的小問題吧 
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul> 
用正則可以得到<ul>起到下個<ul> 之間的內容。 
正則如下: 
/<ul>[/s/S]+?<ul>/i 
首先匹配兩側的ul標籤,中間的[/s/S]+?可以匹配一個或者多個任意字元,一定要非貪婪,否則會匹 
配<ul>safsf<ul>safsf</ul><ul>。 
 
用正規表示式獲得檔名 
來源:C:/006.JPG 
c:/images/tupian/006.jpg 
可能是直接在碟符根目錄下,也可能在好幾層目錄下,要求替換到只剩檔名。 
xlez的正則如下: 
/[^////]*[////]+/g 
首先匹配非左右斜線字元0或多個,然後是左右斜線一個或者多個。形如“xxx/”或者“xxx/”或者“/”或 
者“/” 
函式以及測試程式碼: 
<script type="text/javascript"> 
function getFileName(str){ 
var reg = /[^////]*[////]+/g; 
//xxx/或者是xxx/ 
str = str.replace(reg,''); 
return str; 

var str = "c://images//tupian//006.jpg"; 
document.write(getFileName(str)+'<br />'); 
var str2 = "c:/images/tupian/test2.jpg"; 
document.write(getFileName(str2)); 
</script> 
注意,/需要轉義。 
 
絕對路徑變相對路徑 
來源:討論一個正則 
將<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">轉換 
為:<IMG height="120" width="800" src="/image/somepic.gif">。 
其中網址可能改變,例如http://localhost等等。 
cloudchen的正則: 
/http:////[^//]+/ 
首先是http://,然後[^//]+找過1個或者多個非/字元,因為遇到第一個/表示已經到目錄了,停止匹 
配。 
測試程式碼如下: 
<script type="text/javascript"> 
var str = '<IMG height="120" width="800" src="http://23.123.22.12/image/ 
somepic.gif">'; 
var reg = /http:////[^//]+/; 
str = str.replace(reg,""); 
alert(str) 
</script> 
 
使用者名稱正則 
來源:求正則,急急呀!! 
用於使用者名稱註冊,,使用者名稱只能用中文、英文、數字、下劃線、4-16個字元。 
hansir和解決方案弄成正則: 
/^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/ 
中文字元或者單詞字元,4到16個。實現4到16結成到正則裡的關鍵就是開始^和結束$,這就等於整 
個字串只能有這些匹配的內容,不能有多餘的。 
函式和測試程式碼如下: 
<script type="text/javascript"> 
function isEmail(str){ 
var reg = /^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/; 
return reg.test(str); 

var str = '超級無敵使用者名稱regExp'; 
var str2 = '搗亂的@'; 
var str3 = '太短' 
var str4 = '太長longlonglonglonglonglonglonglong' 
document.write(isEmail(str)+'<br />'); 
document.write(isEmail(str2)+'<br />'); 
document.write(isEmail(str3)+'<br />'); 
document.write(isEmail(str4)+'<br />'); 
</script> 
 
匹配英文地址 
來源:-求助- 正則問題 
規則如下: 
包含"點", "字母","空格","逗號","數字",但開頭和結尾不能是除字母外任何字元。 
[/.a-zA-Z/s,0-9]這個字符集就實現了字母,空格,逗號和數字。最終正則如下: 
/^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/ 
開頭必須有字母,結束也必須是一個以上字母。測試程式碼如下: 
<script type="text/javascript"> 
function testReg(reg,str){ 
return reg.test(str); 

var reg = /^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/; 
var str = 'No.8,ChangAn Street,BeiJing,China'; 
var str2 = '8.No,ChangAn Street,BeiJing,China'; 
var str3 = 'No.8,ChangAn Street,BeiJing,China88'; 
document.write(testReg(reg,str)+'<br />') 
document.write(testReg(reg,str2)+'<br />') 
document.write(testReg(reg,str3)+'<br />') 
</script> 
 
正則匹配價格 
來源:為什麼這個正則不起作用啊?急啊? 
價格的格式應該如下: 
開頭數字若干位,可能有一個小數點,小數點後面可以有兩位數字。hansir給出的對應正則如下: 
/^(/d*/./d{0,2}|/d+).*$/ 
hansir給出的測試程式碼如下: 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" c /> 
<title>無標題文件</title> 
<script type="text/javascript"> 
function checkPrice(me){ 
if(!(/^(?:/d+|/d+/./d{0,2})$/.test(me.value))){ 
me.value = me.value.replace(/^(/d*/./d{0,2}|/d+).*$/,'$1'); 


</script> 
</head> 
<body> 
<input type="text" /> 
</body> 
</html> 
 
身份證號碼的匹配 
來源:關於正則的,大家幫幫忙,急,線上等 
身份證號碼可以是15位或者是18位,其中最後一位可以是X。其它全是數字,正則如下: 
/^(/d{14}|/d{17})(/d|[xX])$/ 
開頭是14位或者17位數字,結尾可以是數字或者是x或者是X。 
測試程式碼如下: 
<script type="text/javascript"> 
function testReg(reg,str){ 
return reg.test(str); 

var reg = /^(/d{14}|/d{17})(/d|[xX])$/; 
var str = '123456789012345';//15位 
var str2 = '123456789012345678';//18位 
var str3 = '12345678901234567X';//最後一位是X 
var str4 = '1234';//位數不對 
document.write(testReg(reg,str)+'<br />'); 
document.write(testReg(reg,str2)+'<br />'); 
document.write(testReg(reg,str3)+'<br />'); 
document.write(testReg(reg,str4)+'<br />'); 
</script> 
 
要求文字有指定行數 
來源:[求助]求一句正規表示式的寫法 
匹配至少兩行的字串,每行都為非空字元。 
只要匹配到[/n/r]就表示有換行了,再保證換行的兩段都不是空字元就可以了。正則如下: 
//S+?[/n/r]/S+?/i 
這個正則的應用應該是用在textarea裡,如果是如下要求:可以支援所有字元,中間可帶空格,可以 
包括英文、數字、中文、標點 
這樣的話,只要針對空格再改一下就行了。(按照非空的要求,上面有不能匹配“字元+空格+換行+字 
符”的字串)。修改如下: 
//S+?/s*?[/n/r]/s*?/S+?/i 
 
單詞首字母大寫 
來源:求個正則,處理英文單詞或片語的 
每單詞首字大寫,其他小寫。如blue idea轉換為Blue Idea,BLUE IDEA也轉換為Blue Idea 
cloeft的正則: 
//b(/w)|/s(/w)/g 
所謂“首字母”包括兩種情況:第一種是邊界(開頭)的單詞字元,一種是空格之後的新單詞的第一個字 
母。測試程式碼如下: 
<script type="text/javascript"> 
function replaceReg(reg,str){ 
str = str.toLowerCase(); 
return str.replace(reg,function(m){return m.toUpperCase()}) 

var reg = //b(/w)|/s(/w)/g; 
var str = 'blue idea'; 
var str2 = 'BLUE IDEA'; 
var str3 = 'Test /n str is no good!'; 
var str4 = 'final test'; 
document.write(replaceReg(reg,str)+'<br />'); 
document.write(replaceReg(reg,str2)+'<br />'); 
document.write(replaceReg(reg,str3)+'<br />'); 
document.write(replaceReg(reg,str4)+'<br />'); 
</script> 
 
正則驗證日期格式 
來源:YYYY-MM-DD的正則怎樣寫啊? 
yyyy-mm-dd格式 
正則如下: 
/^/d{4}-/d{1,2}-/d{1,2}$/ 
4位數字,橫線,1或者2位數字,再橫線,最後又是1或者2位數字。 
測試程式碼如下: 
<script type="text/javascript"> 
function testReg(reg,str){ 
return reg.test(str); 

var reg = /^/d{4}-/d{1,2}-/d{1,2}$/; 
var str = '2008-8-8'; 
var str2 = '2008-08-08'; 
var str3 = '08-08-2008'; 
var str4 = '2008 08 08'; 
document.write(testReg(reg,str)+'<br />'); 
document.write(testReg(reg,str2)+'<br />'); 
document.write(testReg(reg,str3)+'<br />'); 
document.write(testReg(reg,str4)+'<br />'); 
</script> 
 
第二種格式:來源:求一正規表示式 
yyyy-mm-dd 
或 
yyyy/mm/dd 
用“或”簡單地修改一下就行了。 
/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/ 
 
去掉檔案的字尾名 
來源:求一個正則 
www.abc.com/dc/fda.asp變為www.abc.com/dc/fda。 
如果檔案字尾已知的話這個問題就非常簡單了,正則如下: 
//.asp$/ 
匹配最後的.asp而已,測試程式碼如下: 
<script type="text/javascript"> 
function delAspExtension(str){ 
var reg = //.asp$/; 
return str.replace(reg,''); 

var str = 'www.abc.com/dc/fda.asp'; 
document.write(delAspExtension(str)+'<br />'); 
</script> 
如果檔名未知的話就用這個正則://./w+$/,測試程式碼如下: 
<script type="text/javascript"> 
function delExtension(str){ 
var reg = //./w+$/; 
return str.replace(reg,''); 

var str = 'example.com/dc/fda.asp'; 
document.write(delExtension(str)+'<br />'); 
var str2 = 'test/regular/fda.do'; 
document.write(delExtension(str2)+'<br />'); 
var str3 = 'example.com/dc/fda.strange_extension'; 
document.write(delExtension(str3)+'<br />'); 
</script> 
 
驗證郵箱的正規表示式 
來源:找JAVASCRIPT寫的表單檢查程式碼! 
fuchangxi的正則: 
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/ 
開始必須是一個或者多個單詞字元或者是-,加上@,然後又是一個或者多個單詞字元或者是-。然後是 
點“.”和單詞字元和-的組合,可以有一個或者多個組合。 
<script type="text/javascript"> 
function isEmail(str){ 
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/; 
return reg.test(str); 

var str = 'test@hotmail.com'; 
document.write(isEmail(str)+'<br />'); 
var str2 = 'test@sima.vip.com'; 
document.write(isEmail(str2)+'<br />'); 
var str3 = 'te-st@qq.com.cn'; 
document.write(isEmail(str3)+'<br />'); 
var str4 = 'te_st@sima.vip.com'; 
document.write(isEmail(str4)+'<br />'); 
var str5 = 'te.._st@sima.vip.com'; 
document.write(isEmail(str5)+'<br />'); 
</script> 
我不太瞭解郵箱的具體規則。感覺這個正則比較簡單,EMAIL校驗正則討論求解裡有比較詳細的郵 
箱正則討論。 
 
匹配原始碼中的連結 
來源:正則 
能夠匹配HTML程式碼中連結的正則。 
原帖正則:/<a href=".+?">.+?<//a>/g 
感覺有點嚴格,首先要<a href=".+?">有,而且href屬性可以是一個或者多個除換行外任意字元(非 
貪婪)。後面是.+?<//a>,一個或者多個除換行外任意字元(非貪婪),再加上結束標籤。 
有個問題,如果a的起始標籤最後有空格,或者除了href還有其它屬性的話,上面的正則就不能匹配這 
個連結了。 
例如: 
<a href="asdfs" >……多了個空格。 
<a id="xx" href="asdfs">……前面有屬性。 
…… 
重寫正則:/<a/s(/s*/w*?=".+?")*(/s*href=".+?")(/s*/w*?=".+?")*/s*>[/s/S]*?<//a>/ 
思路如下:首先要有<a和一個空格。/<a/s/ 
第一個(/s*/w*?=".+?")* 
可以匹配一個屬性,屬性前面可能有或者沒有多餘的空格,用/s*匹配;屬性名肯定是單詞字元, 
用/w*?匹配;=".+?"就是匹配屬性值了非換行字元若干個;整個括號外面加個*表示可能有任意多個 
屬性。 
(/s*href=".+?") 
匹配href,它也是一個屬性,所以只要把上面子正規表示式中的/w修改為href=就行了。 
(/s*/w*?=".+?")*重複第一個子正規表示式,再次接受任意個屬性。 
/s*>,屬性最後再加上若干個空格和>。 
[/s/S]*?,連結的文字,可能有任何字元組成,若干個,非貪婪。 
<//a>最後是結束標籤。 
補充:屬性名和=之間,以及=和屬性值之間也可能有空格。所以要再加上幾個/s*。 
最後的例項程式碼如下: 
<script type="text/javascript"> 
function findLinks(str){ 
var reg = 
/<a/s(/s*/w*?/s*=/s*".+?")*(/s*href/s*=/s*".+?")(/s*/w*?/s*=/s*".+?") 
*/s*>[/s/S]*?<//a>/g; 
var arr = str.match(reg); 
for(var i=0;i<arr.length;i++){ 
//alert(arr); 
document.write('link:'+arr+'<br />'); 


var str = '<p>測試連結:<a id = "test" href="http://bbs.blueidea.com" title="無敵">經典 
論壇 
</a></p><a href = "http://www.blueidea.com/" >藍色理想</a>'; 
var arr = findLinks(str); 
</script> 
會把所有的連結在頁面直接顯示出來。注意, 
本帖遺留問題:如何執行從右到左的匹配。貌似JS 或者VBS 沒有提供這個功能2、JS 或 
者VBS 不支援後行斷言。。用什麼方法實現這個功能

相關文章