麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

JavaScript中常用的正則表達(dá)式日常整理(全)

2020-03-16 21:04:48
字體:
供稿:網(wǎng)友

本篇文章是小編日常整理有關(guān)js常用的正則表達(dá)式,比較全面,對(duì)大家學(xué)習(xí)javascript正則表達(dá)式非常有用,需要的朋友一起學(xué)習(xí)吧

//校驗(yàn)是否全由數(shù)字組成

 

 
  1. function isDigit(s)  
  2. {  
  3. var patrn=/^[0-9]{1,20}$/;  
  4. if (!patrn.exec(s)) return false 
  5. return true 

匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]

評(píng)注:匹配中文還真是個(gè)頭疼的事,有了這個(gè)表達(dá)式就好辦了

匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]

評(píng)注:可以用來計(jì)算字符串的長度(一個(gè)雙字節(jié)字符長度計(jì)2,ASCII字符計(jì)1)

匹配空白行的正則表達(dá)式:ns*r

評(píng)注:可以用來刪除空白行

匹配HTML標(biāo)記的正則表達(dá)式:< (S*?)[^>]*>.*?|< .*? />

評(píng)注:網(wǎng)上流傳的版本太糟糕,上面這個(gè)也僅僅能匹配部分,對(duì)于復(fù)雜的嵌套標(biāo)記依舊無能為力

匹配首尾空白字符的正則表達(dá)式:^s*|s*$

評(píng)注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達(dá)式

匹配Email地址的正則表達(dá)式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

評(píng)注:表單驗(yàn)證時(shí)很實(shí)用

匹配網(wǎng)址URL的正則表達(dá)式:[a-zA-z]+://[^s]*

評(píng)注:網(wǎng)上流傳的版本功能很有限,上面這個(gè)基本可以滿足需求

匹配帳號(hào)是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

評(píng)注:表單驗(yàn)證時(shí)很實(shí)用

匹配國內(nèi)電話號(hào)碼:d{3}-d{8}|d{4}-d{7}

評(píng)注:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號(hào):[1-9][0-9]{4,}

評(píng)注:騰訊QQ號(hào)從10000開始

匹配中國郵政編碼:[1-9]d{5}(?!d)

評(píng)注:中國郵政編碼為6位數(shù)字

匹配身份證:d{15}|d{18}

評(píng)注:中國的身份證為15位或18位

匹配ip地址:d+.d+.d+.d+

評(píng)注:提取ip地址時(shí)有用

匹配特定數(shù)字:

^[1-9]d*$    //匹配正整數(shù)

^-[1-9]d*$   //匹配負(fù)整數(shù)

^-?[1-9]d*$   //匹配整數(shù)

^[1-9]d*|0$  //匹配非負(fù)整數(shù)(正整數(shù) + 0)

^-[1-9]d*|0$   //匹配非正整數(shù)(負(fù)整數(shù) + 0)

^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點(diǎn)數(shù)

^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負(fù)浮點(diǎn)數(shù)

^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點(diǎn)數(shù)

^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)

^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)

評(píng)注:處理大量數(shù)據(jù)時(shí)有用,具體應(yīng)用時(shí)注意修正

匹配特定字符串:

^[A-Za-z]+$  //匹配由26個(gè)英文字母組成的字符串

^[A-Z]+$  //匹配由26個(gè)英文字母的大寫組成的字符串

^[a-z]+$  //匹配由26個(gè)英文字母的小寫組成的字符串

^[A-Za-z0-9]+$  //匹配由數(shù)字和26個(gè)英文字母組成的字符串

^w+$  //匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串

在使用RegularExpressionValidator驗(yàn)證控件時(shí)的驗(yàn)證功能及其驗(yàn)證表達(dá)式介紹如下:

只能輸入數(shù)字:“^[0-9]*$”

只能輸入n位的數(shù)字:“^d{n}$”

只能輸入至少n位數(shù)字:“^d{n,}$”

只能輸入m-n位的數(shù)字:“^d{m,n}$”

只能輸入零和非零開頭的數(shù)字:“^(0|[1-9][0-9]*)$”

只能輸入有兩位小數(shù)的正實(shí)數(shù):“^[0-9]+(.[0-9]{2})?$”

只能輸入有1-3位小數(shù)的正實(shí)數(shù):“^[0-9]+(.[0-9]{1,3})?$”

只能輸入非零的正整數(shù):“^+?[1-9][0-9]*$”

只能輸入非零的負(fù)整數(shù):“^-[1-9][0-9]*$”

只能輸入長度為3的字符:“^.{3}$”

只能輸入由26個(gè)英文字母組成的字符串:“^[A-Za-z]+$”

只能輸入由26個(gè)大寫英文字母組成的字符串:“^[A-Z]+$”

只能輸入由26個(gè)小寫英文字母組成的字符串:“^[a-z]+$”

只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:“^[A-Za-z0-9]+$”

只能輸入由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:“^w+$”

驗(yàn)證用戶密碼:“^[a-zA-Z]w{5,17}$”正確格式為:以字母開頭,長度在6-18之間,

只能包含字符、數(shù)字和下劃線。

驗(yàn)證是否含有^%&',;=?$”等字符:“[^%&',;=?$x22]+”

只能輸入漢字:“^[u4e00-u9fa5],{0,}$”

驗(yàn)證Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”

驗(yàn)證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”

驗(yàn)證電話號(hào)碼:“^((d{3,4})|d{3,4}-)?d{7,8}$”

正確格式為:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,

“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。

驗(yàn)證身份證號(hào)(15位或18位數(shù)字):“^d{15}|d{}18$”

驗(yàn)證一年的12個(gè)月:“^(0?[1-9]|1[0-2])$”正確格式為:“01”-“09”和“1”“12”

驗(yàn)證一個(gè)月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”

正確格式為:“01”“09”和“1”“31”。

匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]

匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]

匹配空行的正則表達(dá)式:n[s| ]*r

匹配HTML標(biāo)記的正則表達(dá)式:/< (.*)>.*|< (.*) />/

匹配首尾空格的正則表達(dá)式:(^s*)|(s*$)

匹配Email地址的正則表達(dá)式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配網(wǎng)址URL的正則表達(dá)式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

(1)應(yīng)用:計(jì)算字符串的長度(一個(gè)雙字節(jié)字符長度計(jì)2,ASCII字符計(jì)1)

 

 
  1. String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa”).length;} 

(2)應(yīng)用:javascript中沒有像vbscript那樣的trim函數(shù),我們就可以利用這個(gè)表達(dá)式來實(shí)現(xiàn)

 

 
  1. String.prototype.trim = function() 
  2. return this.replace(/(^s*)|(s*$)/g, “”); 

(3)應(yīng)用:利用正則表達(dá)式分解和轉(zhuǎn)換IP地址

 

 
  1. function IP2V(ip) //IP地址轉(zhuǎn)換成對(duì)應(yīng)數(shù)值 
  2. re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正則表達(dá)式 
  3. if(re.test(ip)) 
  4. return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 
  5. else 
  6. throw new Error(”Not a valid IP address!”) 

(4)應(yīng)用:從URL地址中提取文件名的javascript程序

 

 
  1. s=”http://www.9499.net/page1.htm”; 
  2. s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″) ; //Page1.htm 

(5)應(yīng)用:利用正則表達(dá)式限制網(wǎng)頁表單里的文本框輸入內(nèi)容

用正則表達(dá)式限制只能輸入中文:onkeyup=”value=”/blog/value.replace(/["^u4E00-u9FA5]/g,”) ”

 

 
  1. onbeforepaste=”clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,”))” 

用正則表達(dá)式限制只能輸入全角字符: onkeyup=”value=”/blog/value.replace(/["^uFF00-uFFFF]/g,”) ”

onbeforepaste=”clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,”))”

用正則表達(dá)式限制只能輸入數(shù)字:onkeyup=”value=”/blog/value.replace(/["^d]/g,”) “onbeforepaste= “clipboardData.setData

('text',clipboardData.getData('text').replace(/[^d]/g,”))”

用正則表達(dá)式限制只能輸入數(shù)字和英文:onkeyup=”value=”/blog/value.replace(/[W]/g,””) “onbeforepaste=”clipboardData.setData

('text',clipboardData.getData('text').replace(/[^d]/g,”

中正則表達(dá)式,js去掉html標(biāo)記,去掉字符,截取字符(2009-01-11 10:20:14)

2007-07-08 15:26

1,得到網(wǎng)頁上的鏈接地址:

 

 
  1. string matchString = @"<a[^>]+href=/s*(?:'(?<href>[^']+)'|""(?<href>[^""]+)""|(?<href>[^>/s]+))/s*[^>]*>"

2,得到網(wǎng)頁的標(biāo)題:

 

 
  1. string matchString = @"<title>(?<title>.*)</title>"

3,去掉網(wǎng)頁中的所有的html標(biāo)記:

 

 
  1. string temp = Regex.Replace(html, "<[^>]*>"""); //html是一個(gè)要去除html標(biāo)記的文檔 

java 中去掉網(wǎng)頁中的所有標(biāo)簽

 

 
  1. str = str.replaceAll("<[^>]*>"""); 

4, string matchString = @"

";

5,js去掉所有html標(biāo)記的函數(shù):

 

 
  1. function delHtmlTag(str) 
  2. return str.replace(/<//?.+?>/g,"");//去掉所有的html標(biāo)記 

這個(gè)可能IE5會(huì)錯(cuò),那用這個(gè),梅花的:

 

 
  1. function delHtmlTag(str) 
  2. return str.replace(/<[^>]+>/g,"");//去掉所有的html標(biāo)記 

校驗(yàn)登錄名:只能輸入5-20個(gè)以字母開頭、可帶數(shù)字、“_”、“.”的字串

 

 
  1. function isRegisterUserName(s)  
  2. {  
  3. var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;  
  4. if (!patrn.exec(s)) return false 
  5. return true 

來源:正則匹配空格的問題

字符串內(nèi)字符鍵有空格,但是空格的數(shù)量可能不一致,通過正則將空格的個(gè)數(shù)統(tǒng)一變?yōu)橐粋€(gè)。

例如:藍(lán) 色 理 想

變成:藍(lán) 色 理 想

aobert的正則:

 

 
  1. <script type="text/javascript">  
  2. var str="藍(lán) 色 理 想" 
  3. var reg=//s+/g  
  4. str = str.replace(reg," ")  
  5. document.write(str)  
  6. </script> 

判斷字符串是不是由數(shù)字組成

來源:有沒有簡單的方法判斷字符串由數(shù)字組成?

這個(gè)正則比較簡單,寫了一個(gè)測試

 

 
  1. <script type="text/javascript">  
  2. function isDigit(str){  
  3. var reg = /^/d*$/;  
  4. return reg.test(str);  
  5. }  
  6. var str = "7654321";  
  7. document.write(isDigit(str));  
  8. var str = "test";  
  9. document.write(isDigit(str));  
  10. </script> 

電話號(hào)碼正則

來源:想問一下關(guān)于電話號(hào)碼的正則判斷

:求一個(gè)驗(yàn)證電話號(hào)碼的JS正則

/^/d{3,4}-/d{7,8}(-/d{3,4})?$/區(qū)號(hào)必填為3-4位的數(shù)字,區(qū)號(hào)之后用“-”與電話號(hào)碼連接

^/d{3,4}-電話號(hào)碼為7-8位的數(shù)字

/d{7,8}分機(jī)號(hào)碼為3-4位的數(shù)字,非必填,但若填寫則以“-”與電話號(hào)碼相連接

(-/d{3,4})?手機(jī)號(hào)碼正則表達(dá)式

正則驗(yàn)證手機(jī)號(hào),忽略前面的0,支持130-139,150-159。忽略前面0之后判斷它是11位的。

cloeft的正則:

/^0*(13|15)/d{9}$/ ^0*匹配掉開頭任意數(shù)量的0。

由于手機(jī)號(hào)碼是13任意數(shù)字9位,和15任意數(shù)字9位,所以可以用(13|15)/d{9}匹配。

測試代碼如下:

 

 
  1. function testReg(reg,str){  
  2. return reg.test(str);  
  3. }  
  4. var reg = /^0*(13|15)/d{9}$/;  
  5. var str = '13889294444';  
  6. var str2 = '12889293333';  
  7. var str3 = '23445567';  
  8. document.write(testReg(reg,str)+'<br />');  
  9. document.write(testReg(reg,str2)+'<br />');  
  10. document.write(testReg(reg,str3)+'<br />'); 

使用正則表達(dá)式實(shí)現(xiàn)刪除字符串中的空格:

來源:請(qǐng)問js中有沒有去掉空格的函數(shù)

代碼以及測試代碼如下:

 

 
  1. <script type="text/javascript">  
  2. //刪除字符串兩側(cè)的空白字符。  
  3. function trim(str){  
  4. return str.replace(/^/s+|/s+$/g,'');  
  5. }  
  6. //刪除字符串左側(cè)的空白字符。  
  7. function ltrim(str){  
  8. return str.replace(/^/s+/g,'');  
  9. }  
  10. //刪除字符串右側(cè)的空白字符。  
  11. function rtrim(str){  
  12. return str.replace(//s+$/g,'');  
  13. }  
  14. //以下為測試代碼  
  15. var trimTest = " 123456789 "
  16. //前后各有一個(gè)空格。  
  17. document.write('length:'+trimTest.length+'<br />'); 
  18. //使用前  
  19. document.write('ltrim length:'+ltrim(trimTest).length+'<br />'); 
  20. //使用ltrim后  
  21. document.write('rtrim length:'+rtrim(trimTest).length+'<br />'); 
  22. //使用rtrim后  
  23. document.write('trim length:'+trim(trimTest).length+'<br />'); 
  24. //使用trim后  
  25. </script> 

測試的結(jié)果如下:

length:11

ltrim length:10

rtrim length:10

trim length:9 限制文本框只能輸入數(shù)字和小數(shù)點(diǎn)等等

來源:文本框輸入限制的問題????

只能輸入數(shù)字和小數(shù)點(diǎn)

var reg = /^/d*/.?/d{0,2}$/ 開頭有若干個(gè)數(shù)字,中間有0個(gè)或者一個(gè)小數(shù)點(diǎn),結(jié)尾有0到2個(gè)數(shù)字。

只能輸入小寫的英文字母和小數(shù)點(diǎn),和冒號(hào),正反斜杠(:.//)

var reg = /[a-z/.////:]+/; a-z包括了小寫的英文字母,/.是小數(shù)點(diǎn),//和//分別是左右反斜線,最后是冒號(hào)。整個(gè)組成一個(gè)字符集和代碼任一均可,最后在加上+,1或者多個(gè)。

替換小數(shù)點(diǎn)前內(nèi)容為指定內(nèi)容

來源:求一正則表達(dá)式!

請(qǐng)問 怎么把這個(gè)字符串的小數(shù)點(diǎn)前面的字符替換為我自定義的字符串啊?

例如:infomarket.php?id=197 替換為 test.php?id=197

應(yīng)該可以把第一個(gè)點(diǎn)“.”之前的所有單詞字符替換為test就可以了。我寫的正則如下:

 

 
  1. <script type="text/javascript">  
  2. var str = "infomarket.php?id=197";  
  3. var reg = /^/w*/ig;  
  4. //匹配字符串開頭的任意個(gè)單詞字符  
  5. str = str.replace(reg,'test');  
  6. document.write(str);  
  7. </script> 

原帖的有點(diǎn)復(fù)雜,沒太看明白。

只匹配中文的正則表達(dá)式

來源:關(guān)于上傳的時(shí)候,只能選擇中文名稱的圖片(是否可以用toASCII方法呢?)

前兩天看的《JavaScript開發(fā)王》里恰好有中文的unicode范圍,正則如下:

/[/u4E00-/u9FA5/uf900-/ufa2d]/ 寫了一個(gè)簡單的測試,會(huì)把所有的中文替換成“哦”。

 

 
  1. <script type="text/javascript">  
  2. var str = "有中文?and English.";  
  3. var reg = /[/u4E00-/u9FA5/uf900-/ufa2d]/ig;  
  4. str = str.replace(reg,'哦');  
  5. document.write(str);  
  6. </script> 

返回字符串的中文字符個(gè)數(shù)

來源:有沒返回中文字符字節(jié)的函數(shù)!

一般的字符長度對(duì)中文和英文都是不分別的 如JS里的length,那么如何返回字符串中中文字符的個(gè)數(shù)呢?guoshuang老師在原帖中給出了解決方案,我又沒看懂……

不過我自己也想到了一個(gè)辦法:先去掉非中文字符,再返回length屬性。函數(shù)以及測試代碼如下:

 

 
  1. <script type="text/javascript">  
  2. function cLength(str){  
  3. var reg = /[^/u4E00-/u9FA5/uf900-/ufa2d]/g;  
  4. //匹配非中文的正則表達(dá)式  
  5. var temp = str.replace(reg,'');  
  6. return temp.length;  
  7. }  
  8. var str = "中文123";  
  9. document.write(str.length+'<br />');  
  10. document.write(cLength(str));  
  11. </script> 

結(jié)果:

5

2

中文兩個(gè),數(shù)字三個(gè),正確。

下面的測試也正確。

 

 
  1. var str = "中文123tets@#!#%$#[][{}";  
  2. document.write(str.length+'<br />');  
  3. document.write(cLength(str)); 

正則表達(dá)式取得匹配IP地址前三段

來源:如何用正則取IP前3段

192.168.118.101,192.168.118.72, 192.168.118.1都替換成:192.168.118

只要匹配掉最后一段并且替換為空字符串就行了,正則如下:

//./d{1,3}$/ 匹配結(jié)尾的.n,.nn或者.nnn。

測試代碼如下:

 

 
  1. function replaceReg(reg,str){  
  2. return str.replace(reg,'')  
  3. }  
  4. var reg = //./d{1,3}$/;  
  5. var str = '192.168.118.101';  
  6. var str2 = '192.168.118.72';  
  7. var str3 = '192.168.118.1';  
  8. document.write(replaceReg(reg,str)+'<br />');  
  9. document.write(replaceReg(reg,str2)+'<br />');  
  10. document.write(replaceReg(reg,str3)+'<br />'); 

相似的有,這個(gè)帖子里有一個(gè)驗(yàn)證IP地址的方法:求檢驗(yàn)MAC地址的正則表達(dá)例子

192.168.118.101,192.168.118.72, 192.168.118.1都替換成:192.168.118
只要匹配掉最后一段并且替換為空字符串就行了,正則如下:
//./d{1,3}$/ 匹配結(jié)尾的.n,.nn或者.nnn。
測試代碼如下:
 

  1. function replaceReg(reg,str){ 
  2. return str.replace(reg,''
  3. var reg = //./d{1,3}$/; 
  4. var str = '192.168.118.101'
  5. var str2 = '192.168.118.72'
  6. var str3 = '192.168.118.1'
  7. document.write(replaceReg(reg,str)+'<br />'); 
  8. document.write(replaceReg(reg,str2)+'<br />'); 
  9. document.write(replaceReg(reg,str3)+'<br />'); 


相似的有,這個(gè)帖子里有一個(gè)驗(yàn)證IP地址的方法:求檢驗(yàn)MAC地址的正則表達(dá)例子
匹配<ul>與<ul>之間的內(nèi)容
來源:請(qǐng)教個(gè)正則的小問題吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正則可以得到 <ul>起到下個(gè)<ul> 之間的內(nèi)容。
正則如下:
/<ul>[/s/S]+?<ul>/i 首先匹配兩側(cè)的ul標(biāo)簽,中間的[/s/S]+?可以匹配一個(gè)或者多個(gè)任意字符,一定要非貪婪,否則會(huì)匹配<ul>safsf<ul>safsf</ul><ul>。
用正則表達(dá)式獲得文件名
來源:C:/006.jpg
c:/images/tupian/006.jpg
可能是直接在盤符根目錄下,也可能在好幾層目錄下,要求替換到只剩文件名。
xlez的正則如下:
/[^////]*[////]+/g 首先匹配非左右斜線字符0或多個(gè),然后是左右斜線一個(gè)或者多個(gè)。形如“xxx/”或者“xxx/”或者“/”或者“/”
函數(shù)以及測試代碼:
 

  1. <script type="text/javascript"
  2. function getFileName(str){ 
  3. var reg = /[^////]*[////]+/g; 
  4. //xxx/或者是xxx/ 
  5. str = str.replace(reg,''); 
  6. return str; 
  7. var str = "c://images//tupian//006.jpg"
  8. document.write(getFileName(str)+'<br />'); 
  9. var str2 = "c:/images/tupian/test2.jpg"
  10. document.write(getFileName(str2)); 
  11. </script> 



注意,/需要轉(zhuǎn)義。
絕對(duì)路徑變相對(duì)路徑
來源:討論一個(gè)正則
將<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">轉(zhuǎn)換為:<IMG height="120" width="800" src="/image/somepic.gif">。
其中網(wǎng)址可能改變,例如http://localhost等等。
cloudchen的正則:
/http:////[^//]+/ 首先是http://,然后[^//]+找過1個(gè)或者多個(gè)非/字符,因?yàn)橛龅降谝粋€(gè)/表示已經(jīng)到目錄了,停止匹配。
測試代碼如下:
 

  1. <script type="text/javascript"
  2. var str = '<IMG height="120" width="800" /src="http://23.123.22.12/image/somepic.gif">'
  3. var reg = /http:////[^//]+/; 
  4. str = str.replace(reg,""); 
  5. alert(str) 
  6. </script> 


用戶名正則
來源:求正則,急急呀!!
用于用戶名注冊(cè),,用戶名只 能用 中文、英文、數(shù)字、下劃線、4-16個(gè)字符。
hansir和解決方案弄成正則:
/^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/ 中文字符或者單詞字符,4到16個(gè)。實(shí)現(xiàn)4到16結(jié)成到正則里的關(guān)鍵就是開始^和結(jié)束$,這就等于整個(gè)字符串只能有這些匹配的內(nèi)容,不能有多余的。
函數(shù)和測試代碼如下:

  1. <script type="text/javascript"
  2. function isEmail(str){ 
  3. var reg = /^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/; 
  4. return reg.test(str); 
  5. var str = '超級(jí)無敵用戶名regExp'
  6. var str2 = '搗亂的@'
  7. var str3 = '太短' 
  8. var str4 = '太長longlonglonglonglonglonglonglong' 
  9. document.write(isEmail(str)+'<br />'); 
  10. document.write(isEmail(str2)+'<br />'); 
  11. document.write(isEmail(str3)+'<br />'); 
  12. document.write(isEmail(str4)+'<br />'); 
  13. </script> 



匹配英文地址
來源:-求助- 正則問題
規(guī)則如下:
包含 "點(diǎn)", "字母","空格","逗號(hào)","數(shù)字",但開頭和結(jié)尾不能是除字母外任何字符。
[/.a-zA-Z/s,0-9]這個(gè)字符集就實(shí)現(xiàn)了字母,空格,逗號(hào)和數(shù)字。最終正則如下:
/^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/ 開頭必須有字母,結(jié)束也必須是一個(gè)以上字母。測試代碼如下:

  1. <script type="text/javascript"
  2. function testReg(reg,str){ 
  3. return reg.test(str); 
  4. var reg = /^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/; 
  5. var str = 'No.8,ChangAn Street,BeiJing,China'
  6. var str2 = '8.No,ChangAn Street,BeiJing,China'
  7. var str3 = 'No.8,ChangAn Street,BeiJing,China88'
  8. document.write(testReg(reg,str)+'<br />'
  9. document.write(testReg(reg,str2)+'<br />'
  10. document.write(testReg(reg,str3)+'<br />'
  11. </script> 



正則匹配價(jià)格
來源:為什么這個(gè)正則不起作用啊?急啊?
價(jià)格的格式應(yīng)該如下:
開頭數(shù)字若干位,可能有一個(gè)小數(shù)點(diǎn),小數(shù)點(diǎn)后面可以有兩位數(shù)字。hansir給出的對(duì)應(yīng)正則如下:
/^(/d*/./d{0,2}|/d+).*$/ hansir給出的測試代碼如下:
 

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  5. <title>無標(biāo)題文檔</title> 
  6. <script type="text/javascript"
  7. function checkPrice(me){ 
  8. if(!(/^(?:/d+|/d+/./d{0,2})$/.test(me.value))){ 
  9. me.value = me.value.replace(/^(/d*/./d{0,2}|/d+).*$/,'$1'); 
  10. </script> 
  11. </head> 
  12. <body> 
  13. <input type="text" onkeyup="checkPrice(this);"/> 
  14. </body> 
  15. </html> 


身份證號(hào)碼的匹配
來源:關(guān)于正則的,大家?guī)蛶兔?急,在線等
身份證號(hào)碼可以是15位或者是18位,其中最后一位可以是X。其它全是數(shù)字,正則如下:
/^(/d{14}|/d{17})(/d|[xX])$/ 開頭是14位或者17位數(shù)字,結(jié)尾可以是數(shù)字或者是x或者是X。
測試代碼如下:
 

  1. <script type="text/javascript"
  2. function testReg(reg,str){ 
  3. return reg.test(str); 
  4. var reg = /^(/d{14}|/d{17})(/d|[xX])$/; 
  5. var str = '123456789012345';//15位 
  6. var str2 = '123456789012345678';//18位 
  7. var str3 = '12345678901234567X';//最后一位是X 
  8. var str4 = '1234';//位數(shù)不對(duì) 
  9. document.write(testReg(reg,str)+'<br />'); 
  10. document.write(testReg(reg,str2)+'<br />'); 
  11. document.write(testReg(reg,str3)+'<br />'); 
  12. document.write(testReg(reg,str4)+'<br />'); 
  13. </script> 


要求文本有指定行數(shù)
來源:[求助]求一句正則表達(dá)式的寫法
匹配至少兩行的字符串,每行都為非空字符。
只要匹配到[/n/r]就表示有換行了,再保證換行的兩段都不是空字符就可以了。正則如下:
//S+?[/n/r]/S+?/i 這個(gè)正則的應(yīng)用應(yīng)該是用在textarea里,如果是如下要求:可以支持所有字符,中間可帶空格,可以包括英文、數(shù)字、中文、標(biāo)點(diǎn)
這樣的話,只要針對(duì)空格再改一下就行了。(按照非空的要求,上面有不能匹配“字符+空格+換行+字符”的字符串)。修改如下:
//S+?/s*?[/n/r]/s*?/S+?/i 單詞首字母大寫
來源:求個(gè)正則,處理英文單詞或詞組的
每單詞首字大寫,其他小寫。如blue idea轉(zhuǎn)換為Blue Idea,BLUE IDEA也轉(zhuǎn)換為Blue Idea
cloeft的正則:
//b(/w)|/s(/w)/g 所謂“首字母”包括兩種情況:第一種是邊界(開頭)的單詞字符,一種是空格之后的新單詞的第一個(gè)字母。測試代碼如下:
 

  1. <script type="text/javascript"
  2. function replaceReg(reg,str){ 
  3. str = str.toLowerCase(); 
  4. return str.replace(reg,function(m){return m.toUpperCase()}) 
  5. var reg = //b(/w)|/s(/w)/g; 
  6. var str = 'blue idea'
  7. var str2 = 'BLUE IDEA'
  8. var str3 = 'Test /n str is no good!'
  9. var str4 = 'final test'
  10. document.write(replaceReg(reg,str)+'<br />'); 
  11. document.write(replaceReg(reg,str2)+'<br />'); 
  12. document.write(replaceReg(reg,str3)+'<br />'); 
  13. document.write(replaceReg(reg,str4)+'<br />'); 
  14. </script> 


正則驗(yàn)證日期格式
來源:yyyy-mm-dd的正則怎樣寫啊?
yyyy-mm-dd格式
正則如下:
/^/d{4}-/d{1,2}-/d{1,2}$/ 4位數(shù)字,橫線,1或者2位數(shù)字,再橫線,最后又是1或者2位數(shù)字。
測試代碼如下:
 

  1. <script type="text/javascript"
  2. function testReg(reg,str){ 
  3. return reg.test(str); 
  4. var reg = /^/d{4}-/d{1,2}-/d{1,2}$/; 
  5. var str = '2008-8-8'
  6. var str2 = '2008-08-08'
  7. var str3 = '08-08-2008'
  8. var str4 = '2008 08 08'
  9. document.write(testReg(reg,str)+'<br />'); 
  10. document.write(testReg(reg,str2)+'<br />'); 
  11. document.write(testReg(reg,str3)+'<br />'); 
  12. document.write(testReg(reg,str4)+'<br />'); 
  13. </script> 


第二種格式:來源:求一正則表達(dá)式
yyyy-mm-dd

yyyy/mm/dd
用“或”簡單地修改一下就行了。
/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/ 去掉文件的后綴名
來源:求一個(gè)正則
www.abc.com/dc/fda.asp變?yōu)閣ww.abc.com/dc/fda
如果文件后綴已知的話這個(gè)問題就非常簡單了,正則如下:
//.asp$/ 匹配最后的.asp而已,測試代碼如下:
 

  1. <script type="text/javascript"
  2. function delAspExtension(str){ 
  3. var reg = //.asp$/; 
  4. return str.replace(reg,''); 
  5. var str = 'www.abc.com/dc/fda.asp'
  6. document.write(delAspExtension(str)+'<br />'); 
  7. </script> 



如果文件名未知的話就用這個(gè)正則://./w+$/,測試代碼如下:
 

  1. <script type="text/javascript"
  2. function delExtension(str){ 
  3. var reg = //./w+$/; 
  4. return str.replace(reg,''); 
  5. var str = 'example.com/dc/fda.asp'
  6. document.write(delExtension(str)+'<br />'); 
  7. var str2 = 'test/regular/fda.do'
  8. document.write(delExtension(str2)+'<br />'); 
  9. var str3 = 'example.com/dc/fda.strange_extension'
  10. document.write(delExtension(str3)+'<br />'); 
  11. </script> 


驗(yàn)證郵箱的正則表達(dá)式
來源:找javascript寫的表單檢查代碼!
fuchangxi的正則:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/ 開始必須是一個(gè)或者多個(gè)單詞字符或者是-,加上@,然后又是一個(gè)或者多個(gè)單詞字符或者是-。然后是點(diǎn)“.”和單詞字符和-的組合,可以有一個(gè)或者多個(gè)組合。
 

  1. <script type="text/javascript"
  2. function isEmail(str){ 
  3. var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/; 
  4. return reg.test(str); 
  5. var str = '[email protected]'
  6. document.write(isEmail(str)+'<br />'); 
  7. var str2 = '[email protected]'
  8. document.write(isEmail(str2)+'<br />'); 
  9. var str3 = '[email protected]'
  10. document.write(isEmail(str3)+'<br />'); 
  11. var str4 = '[email protected]'
  12. document.write(isEmail(str4)+'<br />'); 
  13. var str5 = '[email protected]'
  14. document.write(isEmail(str5)+'<br />'); 
  15. </script> 


我不太了解郵箱的具體規(guī)則。感覺這個(gè)正則比較簡單,EMAIL校驗(yàn) 正則 討論 求解里有比較詳細(xì)的郵箱正則討論。
匹配源代碼中的鏈接
來源:正則
能夠匹配HTML代碼中鏈接的正則。
原帖正則:
/<a href=".+?">.+?<//a>/g 感覺有點(diǎn)嚴(yán)格,首先要<a href="".+?">有,而且href屬性可以是一個(gè)或者多個(gè)除換行外任意字符(非貪婪)。后面是.+?<//a>,一個(gè)或者多個(gè)除換行外任意字符(非貪婪),再加上結(jié)束標(biāo)簽。
有個(gè)問題,如果a的起始標(biāo)簽最后有空格,或者除了href還有其它屬性的話,上面的正則就不能匹配這個(gè)鏈接了。
例如:
<a href="asdfs" >……多了個(gè)空格。
<a id="xx" href=""asdfs">……前面有屬性。
……
重寫正則:
/<a/s(/s*/w*?=".+?")*(/s*href=".+?")(/s*/w*?=".+?")*/s*>[/s/S]*?<//a>/ 思路如下:首先要有<a和一個(gè)空格。/<a/s/
第一個(gè)(/s*/w*?=".+?")*
可以匹配一個(gè)屬性,屬性前面可能有或者沒有多余的空格,用/s*匹配;屬性名肯定是單詞字符,用/w*?匹配;=".+?"就是匹配屬性值了非換行字符若干個(gè);整個(gè)括號(hào)外面加個(gè)*表示可能有任意多個(gè)屬性。
(/s*href=".+?")
匹配href,它也是一個(gè)屬性,所以只要把上面子正則表達(dá)式中的/w修改為href=就行了。
(/s*/w*?=".+?")*重復(fù)第一個(gè)子正則表達(dá)式,再次接受任意個(gè)屬性。
/s*>,屬性最后再加上若干個(gè)空格和>。
[/s/S]*?,鏈接的文字,可能有任何字符組成,若干個(gè),非貪婪。
<//a>最后是結(jié)束標(biāo)簽。
補(bǔ)充:屬性名和=之間,以及=和屬性值之間也可能有空格。所以要再加上幾個(gè)/s*。
最后的實(shí)例代碼如下:
 

  1. <script type="text/javascript"
  2. function findLinks(str){ 
  3. var reg = /<a/s(/s*/w*?/s*=/s*".+?")*(/s*href/s*=/s*".+?")(/s*/w*?/s*=/s*".+?"
  4. */s*>[/s/S]*?<//a>/g; 
  5. var arr = str.match(reg); 
  6. for(var i=0;i<arr.length;i++){ 
  7. //alert(arr[i]); 
  8. document.write('link:'+arr[i]+'<br />'); 
  9. var str = '<p>測試鏈接:<a id = "test" href="http://bbs.blueidea.com" title="無敵">經(jīng)典論壇 
  10. </a></p><a? href = "http://www.blueidea.com/"? >藍(lán)色理想</a>'; 
  11. var arr = findLinks(str); 
  12. </script> 


會(huì)把所有的鏈接在頁面直接顯示出來。注意,
本帖遺留問題:如何執(zhí)行從右到左的匹配。貌似JS或者VBS沒有提供這個(gè)功能2、JS或者VBS不支持 后行斷言。。用什么方法實(shí)現(xiàn)這個(gè)功能。
匹配鏈接的文字
來源:求一正則?
代碼:<a href="#>這里要保存</a>,只保存鏈接的文本內(nèi)容,標(biāo)簽信息刪掉。
前面寫過一個(gè)匹配鏈接的正則:
/<a/s(/s*/w*?=".+?")*(/s*href=".+?")(/s*/w*?=".+?")*/s*>[/s/S]*?<//a>/ 不過我們需要捕獲的是文字內(nèi)容,所以需要做一定的修改。第一步就是在所有的括號(hào)內(nèi)都加上?:表示不捕獲。第二步就是再多加一個(gè)括號(hào)放在[/s/S]*?兩側(cè),這樣就可以捕獲到鏈接的文字內(nèi)容了。最后正則如下:
 

  1. /<a/s(?:/s*/w*?/s*=/s*".+?")*(?:/s*href/s*=/s*".+?")(?:/s*/w*?/s*=/s*".+?")*/s*>([/s/S]*?)<//a>/ 



測試代碼如下:
 

  1. <script type="text/javascript"
  2. function anchorText(str){ 
  3. var reg =/<a/s(?:/s*/w*?/s*=/s*".+?")*(?:/s*href/s*=/s*".+?")(?:/s*/w*?/s*=/s*".+?")*/s*> 
  4.  
  5. ([/s/S]*?)<//a>/; 
  6. str = str.replace(reg,'$1'); 
  7. return str; 
  8. var str = '<a id = "test" href="http://bbs.blueidea.com" title="無敵">經(jīng)典論壇</a>'
  9. document.write(anchorText(str)); 
  10. </script> 


正則判斷標(biāo)簽是否閉合
來源:求助 超難!正則表達(dá)式如何判斷一個(gè)標(biāo)簽是否閉合
例如:<img xxx=”xxx” 就是沒有閉合的標(biāo)簽;
<p>p的內(nèi)容,同樣也是沒閉合的標(biāo)簽。
從簡單的正則開始,先匹配起始標(biāo)簽
/<[a-z]+/i 再加上若干屬性:
/<[a-z]+(/s*/w*?/s*=/s*".+?")*/i 下面就到關(guān)鍵點(diǎn)了,標(biāo)簽的閉合。標(biāo)簽可能有兩種方式閉合,<img xxx=”xxx” />
或者是<p>xxx </p>。
(/s*//>)
匹配img類的結(jié)束,即/>。
(/s*?>[/s/S]*?<///1>)
匹配/p類標(biāo)簽的結(jié)束標(biāo)簽。>是其實(shí)標(biāo)簽?zāi)┪玻笫菢?biāo)簽內(nèi)容若干個(gè)任意字符,最后的<///1>就是結(jié)束標(biāo)簽了。
加上一個(gè)或就可以解決了,最后的完整正則表達(dá)式:
整個(gè)正則:
/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?<///1>|/s*//>)/i 拿這個(gè)正則,只要匹配到了就表示閉合,沒匹配到則沒有閉合。不過沒有考慮相同標(biāo)簽嵌套的問題,例如
<div>aaaaaa<div>test</div>
也被判斷為合格,可以通過把最后的匹配p類結(jié)束標(biāo)簽寫成子正則表達(dá)式,并且更改為非貪心,然后在匹配結(jié)果中檢查是否成對(duì)。正則如下:
/<([a-z]+)(/s*/w*?/s*=/s*".+?")*(/s*?>[/s/S]*?(<///1>)+|/s*//>)/i 用正則獲得指定標(biāo)簽的內(nèi)容
來源:求一正則
有如下代碼:
 

  1. <channel> 
  2. <title>藍(lán)色理想</title> 
  3. </channel> 
  4. <item> 
  5. <title>界面設(shè)計(jì)測試規(guī)范</title> 
  6. </item> 
  7. <item> 
  8. <title>《古典寫實(shí)美女》漫畫教程</title> 
  9. </item> 
  10. <item> 
  11. <title>安遠(yuǎn)――消失的光年</title> 
  12. </item> 
  13. <item> 
  14. <title>asp.net 2.0多語言網(wǎng)站解決方案</title> 
  15. </item> 


要求匹配item里的title而不匹配channel里的title。
基本正則:
/<title>[/s/S]*?<//title>/gi 首先是title標(biāo)簽,內(nèi)容為任意字符若干個(gè),然后是title結(jié)束標(biāo)簽。這個(gè)正則已經(jīng)能匹配到所有的title標(biāo)簽。
首先,我簡單地修改了一下原正則:
/<title>[^<>]*?<//title>/gi, 因?yàn)閠itle里面不應(yīng)該再嵌有其它標(biāo)簽,這個(gè)正則同樣是匹配所有標(biāo)題的內(nèi)容,最后再加上不去匹配channel中的title。整個(gè)正則如下:
/<title>[^<>]*?<//title>(?!/s*<//channel>)/gi (?!/s*<//channel>)表示要匹配字符串的后面不能跟著若干個(gè)空格和一個(gè)channel的結(jié)束標(biāo)簽。
原帖里有很方便的測試工具,這里就不給測試代碼了。
正則判斷是否為數(shù)字與字母的混合
來源:關(guān)于正則
不能小于12位,且必須為字母和數(shù)字的混合。
驗(yàn)證字符串包含數(shù)字簡單,驗(yàn)證字符串包含字母也簡單,驗(yàn)證字符串不包含其它字符也簡單,可以用這三個(gè)正則分別檢查一次字符串,邏輯運(yùn)算出最終結(jié)果。
但是怎么能把這些功能寫進(jìn)一個(gè)正則表達(dá)式里呢?這個(gè)問題真有點(diǎn)傷腦筋。
下面是lexrus的正則:
/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig 思路非常的清晰啊:
[a-z]+(?=[0-9])
字母開頭,后面必須緊跟著數(shù)字。
[0-9]+(?=[a-z]
數(shù)字開頭,后面必須緊跟著字母。
[a-z0-9]+
后面的字符只要是數(shù)字或者字母就可以了。經(jīng)過測試,發(fā)現(xiàn)不好使,123dd會(huì)被識(shí)別為不合法,dd123則為合法,可見“數(shù)字開頭,緊跟字母”的正則沒有起作用。測試代碼如下:
 

  1. <script type="text/javascript"
  2. function istrue(str){ 
  3. var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig; 
  4. return reg.test(str); 
  5. var str? = 'AaBc'
  6. var str2 = 'aaa123'
  7. var str3 = '123dd'
  8. var str4 = '1230923403982'
  9. document.write(istrue(str)+'<br />'); 
  10. document.write(istrue(str2)+'<br />'); 
  11. document.write(istrue(str3)+'<br />'); 
  12. document.write(istrue(str4)+'<br />'); 
  13. </script> 


結(jié)果為:
false,true,false,false
結(jié)果中的第三個(gè),將'123dd'判斷為非法是錯(cuò)誤的。剛開始以為是g的問題,去掉了還是不好使。應(yīng)該是瀏覽器bug,我認(rèn)為lexrus的正則是正確的,可能是瀏覽器無法處理或”|”的兩邊都包含正向預(yù)查(?=)。
修改之后的正則如下:
?
1
/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i
意思和上面差不多,但是沒有使用正向預(yù)查,測試代碼如下:
 

  1. <script type="text/javascript"
  2. function istrue(str){ 
  3. var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i; 
  4. return reg.test(str); 
  5. var str? = 'AaBc'
  6. var str2 = 'aaa123'
  7. var str3 = '123dd'
  8. var str4 = '1230923403982'
  9. document.write(istrue(str)+'<br />'); 
  10. document.write(istrue(str2)+'<br />'); 
  11. document.write(istrue(str3)+'<br />'); 
  12. document.write(istrue(str4)+'<br />'); 
  13. </script> 


結(jié)果為
false,true,true,false
正確。
空格與英文同時(shí)存在
來源:正則問題請(qǐng)指教啊!
匹配英文以及空格,要求必須既有英文字母又有空格。
這個(gè)思路和上面的差不多,只要把數(shù)字改成空格就可以了。正則如下:
/^(([a-z]+/s+)|(/s+[a-z]+))[a-z/s]*$/i 英文開頭加空格,或者是空格開頭加英文,后面可以是英文或者空格。測試代碼如下:
 

  1. <script type="text/javascript"
  2. function istrue(str){ 
  3. var reg=/^(([a-z]+/s+)|(/s+[a-z]+))[a-z/s]*$/i; 
  4. return reg.test(str); 
  5. var str? = 'asdf'
  6. var str2 = 'sadf sdf'
  7. var str3 = 'asdf '
  8. document.write(istrue(str)+'<br />'); 
  9. document.write(istrue(str2)+'<br />'); 
  10. document.write(istrue(str3)+'<br />'); 
  11. </script> 


利用這個(gè)思路也可以實(shí)現(xiàn)英文空格英文,英文單詞多于兩個(gè)的匹配。同樣,也可以把英文字母換成單詞字符/w。
顯示或者保存正則表達(dá)式匹配的部分內(nèi)容
有如下電話號(hào)碼:
13588888333
13658447322
13558885354
13587774654
13854554786
要求,要求只匹配135開頭的電話,但是匹配結(jié)果只保留135后面的數(shù)字。
由于JavaScript里的正則不支持(?=xx)xxx的模式,只支持xxx(?=xx)的模式。所以只能將135后面的內(nèi)容作為一個(gè)子正則表達(dá)式匹配的內(nèi)容,然后再在后面引用。
Carl給出的函數(shù)如下:
 

  1. function f(phoneNumber) { 
  2. var pattern = /^(135)(/d{8})$/; 
  3. if(pattern.test(phoneNumber)) 
  4. return phoneNumber.replace(pattern,"$2"); 
  5. else 
  6. return "不是135打頭的手機(jī)號(hào)碼!"



/^(135)(/d{8})$/ 正則中,135作為開頭表示第一個(gè)子正則表達(dá)式,第二個(gè)括號(hào)內(nèi)的子正則表達(dá)式則匹配后面的8個(gè)數(shù)字,然后在replace中使用$2就可以引用這個(gè)子正則表達(dá)式匹配的內(nèi)容了。測試代碼如下:
 

  1. <script type="text/javascript"
  2. function f(phoneNumber) { 
  3. var pattern = /^(135)(/d{8})$/; 
  4. if(pattern.test(phoneNumber)) 
  5. return phoneNumber.replace(pattern,"$2"); 
  6. else 
  7. return "不是135打頭的手機(jī)號(hào)碼!"
  8. var arr = new Array( 
  9. "13588888333"
  10. "13658447322"
  11. "13558885354"
  12. "13587774654"
  13. "13854554786" 
  14. ); 
  15. for(var i = 0; i < arr.length; i++) 
  16. document.write(f(arr[i])+'<br />'); 
  17. </script> 


正則表達(dá)式替換變量
來源:求教正則
有一個(gè)數(shù)組:
var _A = ['A','B','C','D'];
有一個(gè)有“變量”的字符串。
var _B = '<ul><li>$0$</li><li>$1$</li><li>$2$</li><li>$3$</li></ul>';
說是變量,其實(shí)只是字符串中的特殊字符,例如$0$,就稱這個(gè)為偽變量吧。
最后的要求就是使用正則獲得下面這樣一個(gè)字符串:
_C = '<ul><li>A</li><li>B</li><li>C</li><li>D</li></ul>';
IamUE給出了代碼:
 

  1. <script type="text/javascript"
  2. var _A = ['A','B','C','D']; 
  3. var _B = '<ul><li>$0$</li><li>$1$</li><li>$2$</li><li>$3$</li></ul>'
  4. var reg=//$/d+/$/ig; 
  5. C=_B.replace(reg,function($1){ 
  6. var indexnum=$1.replace(//$/ig,""); 
  7. if (indexnum<_A.length) 
  8. {return _A[indexnum];} 
  9. else{return ""
  10. }); 
  11. alert(C); 
  12. </script> 


代碼分析:看到代碼之后感覺有點(diǎn)暈,首先,正則reg中沒有任何的括號(hào),應(yīng)該是沒有捕獲內(nèi)容的,那么后面怎么又使用$1了引用了呢?通過alert測試,發(fā)現(xiàn)它是整個(gè)正則匹配的內(nèi)容,而且不一定要寫作$1,可以寫為$0,甚至是寫為x都沒關(guān)系,它總是整個(gè)匹配。
第一次,$1匹配到_B中的“$0$”,匿名函數(shù)中將它的$去掉,變成了0,檢查是否越界之后,用這個(gè)0作為下標(biāo)去訪問數(shù)組_A。
由于正則reg定義了g屬性,所以會(huì)繼續(xù)替換$1$、$2$等等。步驟都和上面一樣。
正則替換指定屬性中的文本
來源:怎樣用正則來查找替換?
有如下代碼:
 

  1. <td align="center"><img src="../photo/ccg/thumbnails/O'Malley's West_jpg.gif" border="0" onClick="MM_openBrWindow('../photo/ccg/pages/O'Malley's West_jpg.htm','BE','width=386,height=306')"><br> 
  2. O'Malley's West</td> 


要求將所有onclick屬性中的'替換成/',也就是將單引號(hào)轉(zhuǎn)義。
首先,需要匹配onclick屬性:
/onclick/s*=/s*".+?"/ig 然后再將所有的'都替換成/'就可以了。
將阿拉伯?dāng)?shù)字替換為中文大寫形式
來源:正則問題
將123替換成壹貳叁。
只要匹配一個(gè)數(shù)字就可以了,測試代碼如下(如果顯示為亂碼就調(diào)整一下瀏覽器的字符編碼):

  1. function replaceReg(reg,str){ 
  2. return str.replace(reg,function(m){return arr[m];}) 
  3. arr=new Array("零","壹","貳","叁","肆","伍","陸","柒","捌","玖"); 
  4. var reg = //d/g; 
  5. var str = '13889294444'
  6. var str2 = '12889293333'
  7. var str3 = '23445567'
  8. document.write(replaceReg(reg,str)+'<br />'); 
  9. document.write(replaceReg(reg,str2)+'<br />'); 
  10. document.write(replaceReg(reg,str3)+'<br />'); 


替換文本中的URL為鏈接
來源:求一鏈接替換正則
將一個(gè)用戶輸入的一段文字中的url替換成可以點(diǎn)擊的link地址。例如:http://www.blueidea.com可以替換成 [url]http://www.cctv.com[/url]
或<a href="http://www.cctv.com">http://www. blueidea.com</a>.
這個(gè)正則的關(guān)鍵就在于匹配鏈接,匹配之后,在兩邊加上a標(biāo)簽和屬性不是問題。
/http:////[/w-]*(/.[/w-]*)+/ig 首先匹配http://。
[/w-]*是可能的www和bbs等。
/.[/w-]*匹配.xxx形式,至少有一個(gè)。
測試代碼如下:
 

  1. <script type="text/javascript"
  2. function replaceReg(reg,str){ 
  3. return str.replace(reg,function(m){return '<a href="'+m+'">'+m+'</a>';}) 
  4. var reg = /http:////[/w-]*(/.[/w-]*)+/ig; 
  5. var str = '將一個(gè)用戶輸入的一段文字中的url替換成可以點(diǎn)擊的link地址。/ 
  6. 測試一下:http://www.blueidea.com緊接著中文,還有http://bbs.blueidea.com / 
  7. is very good!http://blueidea.com!最后在看看帶.cn的:http://www.sina.com.cn呵呵。'; 
  8. document.write(replaceReg(reg,str)+'<br />'); 
  9. </script> 


從HTML代碼段刪除指定標(biāo)簽極其內(nèi)容
來源:關(guān)于正則的問題
在一段代碼中去除<script ...... /script>, <head>...</head>,<%.....%>等代碼塊
隆的正則:
/<(script|meta|%)[/s/S]*?//(script|meta|%)>/ 試了一下,匹配如下文本正常:
<script type="text/javascript">
我是要被刪除的腳本
</script>
哎。就剩下我了。 但是,如果使用類似的正則:
/<(script|head|%)[/s/S]*?//(script|head|%)>/ig 匹配有嵌套的標(biāo)簽:
<head>
<script type="text/javascript">
我是要被刪除的腳本
</script>
</head>
哎。就剩下我了。 實(shí)際匹配的內(nèi)容是:
<head>
<script type="text/javascript">
我是要被刪除的腳本
</script>
這是因?yàn)閇/s/S]*?里的非貪婪造成的。可以使用JavaScript正則里的反向引用來解決這個(gè)問題,如果起始標(biāo)簽匹配了head,那么結(jié)束標(biāo)簽也必須是head。
最后的正則如下:
/<(script|head|%)[/s/S]*?///1>/ig 用正則給文本分段
來源:怎樣用正則分段落
原代碼:[title]標(biāo)題一[/title]內(nèi)容一232323sdfga [title]標(biāo)題二[/title]內(nèi)容二2232323 [title]標(biāo)題三[/title]內(nèi)容三2232323
要把文本分段成如下格式:
一、[title]標(biāo)題一[/title]內(nèi)容一232323sdfga
二、[title]標(biāo)題二[/title]內(nèi)容二2232323
三、[title]標(biāo)題三[/title]內(nèi)容三2232323
只要用正則匹配title就可以了,所以正則比較簡單
//[title/]/ig 至于開始的的漢字序號(hào),只要一個(gè)數(shù)組就解決了,最終代碼如下:
 

  1. <script type="text/javascript"
  2. function replaceReg(reg,str){ 
  3. var mark =0; 
  4. return str.replace(reg,function(m){mark++;return '<br />'+arr[mark]+'、'+m;}) 
  5. var arr = ["零","壹","貳","叁","肆","伍","陸","柒","捌","玖"]; 
  6. var reg = //[title/]/ig; 
  7. var str = '[title]標(biāo)題一[/title]內(nèi)容一232323sdfga / 
  8. [title]標(biāo)題二[/title]內(nèi)容二2232323 [title]標(biāo)題三[/title]內(nèi)容三2232323'; 
  9. document.write(replaceReg(reg,str)+'<br />'); 
  10. </script> 


轉(zhuǎn)換源代碼中的標(biāo)簽
來源:一個(gè)正則上的問題
將代碼中的HTML標(biāo)簽img轉(zhuǎn)換為[img]url[/img]。
/<img(?:/s*/w*?/s*=/s*".+?")*?/s*src/s*=/s*"(.+?)"(?:/s*/w*?/s*=/s*".+?")*/s*>/ig
這段正則和匹配鏈接標(biāo)簽的正則基本一樣,修改如下,標(biāo)簽名img,沒有結(jié)束標(biāo)簽而是>結(jié)束。
測試代碼如下:

  1. <script type="text/javascript"
  2. function replaceReg(reg,str){ 
  3. return str.replace(reg,'[img]$1[/img]'
  4. var reg = 
  5. /<img(?:/s*/w*?/s*=/s*".+?")*?/s*src/s*=/s*"(.+?)"(?:/s*/w*?/s*=/s*".+?")*/s*>/ig; 
  6. var str = '我就是傳說中的圖片了<img src="URL">哎。'
  7. document.write(replaceReg(reg,str)+'<br />'); 
  8. </script> 



第二個(gè)是替換object代碼嵌入的flash代碼替換為
Flash動(dòng)畫
在線播放

針對(duì)原文的正則如下:
/<object[/s/S]*?src=([/s/S]+?)(?=/s)[/s/S]*<//object>/i 如果是所有的屬性都有雙引號(hào)的話正則也需要修改。
測試如下:

  1. <script type="text/javascript"
  2. function replaceReg(reg,str){ 
  3. return str.replace(reg,'<div class="UBBPanel"><div class="UBBTitle"><img src="/skin/blue/images/flash.gif" alt="" style="margin:0px 2px -3px 0px" border="0">Flash動(dòng)畫</div><div class="UBBContent"><a id="meiti55144_href" href="javascript:MediaShow('swf','meiti55144','$1','500','300')"><img name="meiti55144_img" src="/skin/blue/images/mm_snd.gif" style="margin:0px 3px -2px 0px" border="0" alt=""><span id="meiti55144_text">在線播放</span></a><div id="meiti55144"></div></div></div>'
  4. var reg = /<object[/s/S]*?src=([/s/S]+?)(?=/s)[/s/S]*<//object>/i; 
  5. var str = '<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 / 
  6. codebase=http://download.macromedia.com/pub/shockwave/cabs/flash// 
  7. swflash.cab#version=5,0,0,0 width=255 height=250><param name=movie / 
  8. value=url><param name=quality value=high><embed src=url quality=high / 
  9. pluginspage=http://www.macromedia.com/shockwave/download/index.cgi?/ 
  10. P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash / 
  11. width=255 height=250></embed></object>'; 
  12. document.write(replaceReg(reg,str)+'<br />'); 
  13. </script> 


給屬性添加雙引號(hào)
來源:請(qǐng)教正則表達(dá)式高手
給HTML標(biāo)簽中的屬性添加雙引號(hào)。
<a href=xxx>改為:<a href="xxx">
LeXRus的第一個(gè)正則如下:
/(?!/</w+)(/s+/w+)/=([^>/"/s]+)/ig 第一個(gè)括號(hào)沒看明白,JS應(yīng)該是不支持。所以我擅自給刪掉了,剩下的正則如下:
/(/s+/w+)/=([^>/"/s]+)/ig 第一個(gè)括號(hào)里的/s+/w+匹配的是屬性名。
然后是=,不用轉(zhuǎn)義。
第二個(gè)括號(hào)里的[^>/"/s]+匹配屬性值。不匹配>”和空格。這里的引號(hào)不用轉(zhuǎn)義。在意思不改變的情況下,稍微改了改,正則如下:
/(/s+/w+)=([^>"/s]+)/ig 需要注意的是這個(gè)正則不匹配=兩邊有空格的屬性,例如href = xxx。相匹配的話就改成:
/(/s+/w+)/s*=/s*([^>"/s]+)/ig 代碼:
str=str.replace(/(?!/</w+)(/s+/w+)/=([^>/"/s]+)/ig,'$1="$2"'); 其中'$1=”$2”'就實(shí)現(xiàn)了給屬性值添加上雙引號(hào)。不過ncs指出了這個(gè)正則替換的幾個(gè)問題,一是上面的空格問題,二是如果非標(biāo)簽內(nèi)部有等號(hào),且前面又恰巧有空白字符的話,它將會(huì)被誤識(shí)別為屬性,例如:
<a href=xxx target=yyy title = asdfasf> test=sd
里面的test=sd也會(huì)被匹配。三是如果屬性原來使用了單引號(hào),會(huì)被再包上一層雙引號(hào)……
來看看LeXRus前輩的新正則替換方法:
 

  1. str=str.replace(/(?!</w+)(/s+/w+)/s*=/s*([^>/"/s]+)(?=[^>]*>)/ig,'$1="$2"') 
  2. .replace(//"/'([^/'/"]+)/'/"/ig,'/"$1/"'); 


先來看第一個(gè)正則:
/ (/s+/w+)/s*=/s*([^>"/s]+)(?=[^>]*>)/ig 結(jié)尾新添的(?=[^>]*>)意在解決普通文本中有等號(hào)被誤識(shí)別為屬性的問題:
<a href=xxx target=yyy title = asdfasf> test=sd
就沒問題了,但是
<a href=xxx target=yyy title = asdfasf> test=sd<tag>又一個(gè)標(biāo)簽</tag>
中的test=sd<tag>又會(huì)被識(shí)別為屬性。
我覺得改成下面的正則就沒問題了:
/(/s+/w+)/s*=/s*([^<>"/s]+)(?=[^<>]*>)/ig 分別在第二個(gè)括號(hào)的字符集合和最后的反向預(yù)查的字符集合中添加了一個(gè)<。
下面再來分析第二個(gè)正則,
//"/'([^/'/"]+)/'/"/ig 這個(gè)正則用于匹配雙引號(hào),單引號(hào)多層嵌套的情況,同樣,不用轉(zhuǎn)義,修改正則如下:
/"'([^'"]*)'"/ig
這樣基本任務(wù)就完成了。測試代碼如下:
 

  1. <script type="text/javascript"
  2. function rp(str,trg){ 
  3. var reg1 = /(/s+/w+)/s*=/s*([^<>"/s]+)(?=[^<>]*>)/ig 
  4. var reg2 = /"'([^'"]*)'"/ig; 
  5. str=str.replace(reg1,'$1="$2"').replace(reg2,'/"$1/"'); 
  6. trg.value=str; 
  7. </script> 
  8. <textarea id="sou" style="width:100%"
  9. <a href = xxx name=aaa target=_blank title='asdfasf' 
  10. onclick=alert('blueidea')> asfd=asfd 
  11. </textarea> 
  12. <input type="button" onclick="rp(sou.value,sou)" value="replace"/> 


原帖里L(fēng)eXRus又提出了新問題:
hint=i am lexrus
這樣的屬性會(huì)有問題,不過我感覺不加引號(hào)的話,屬性值里就不可能有空格,否則會(huì)被識(shí)別為多個(gè)屬性了。不過看到最后ncs的回帖我就哭了:
onclick=if(document.forms.length>0)
這樣的屬性怎么辦?大于號(hào)會(huì)被識(shí)別為標(biāo)簽結(jié)束……還是分離行為與文檔吧。補(bǔ)充一下,其實(shí)修補(bǔ)一下正則也可以解決,只要改成如下正則即可:
/(/s+/w+)/s*=/s*([^"/s]+)(?=[^<>]*>)/ig 就是去掉第二個(gè)括號(hào)內(nèi)字符集合里的<>。最后這個(gè)問題也解決。
給table加上tbody
來源:通過正則表達(dá)式快速在后加上
有若干table,但是沒有tbody。現(xiàn)在需要用正則批量加上。
匹配table結(jié)束標(biāo)簽</table>比較簡單,在前面加上一個(gè)</tbody>就行了。
但是,匹配table的起始標(biāo)簽有點(diǎn)難度,因?yàn)榭赡苡袑傩浴2贿^之前匹配過鏈接了,這個(gè)也大同小異。
實(shí)例table代碼如下:
 

  1. <table width="100%" border="0" cellpadding="2" cellspacing="3"
  2. <table width="100%"


正則:
/<table/s(/s*/w*?/s*=/s*".+?")*?/s*?>/g 匹配一個(gè)<table,在匹配若干個(gè)屬性,最后只要再找到>就代表標(biāo)簽結(jié)束。
之后再replace一下,加上<tbody>就可以了。
去掉標(biāo)簽的所有屬性
來源:正則表達(dá)式(Dreamweaver8)
<td style="width: 23px; height: 26px;" align="left">***</td>
變成沒有任何屬性的
<td>***</td>
思路:非捕獲匹配屬性,捕獲匹配標(biāo)簽,使用捕獲結(jié)果替換掉字符串。正則如下:
/(<td)/s(?:/s*/w*?/s*=/s*".+?")*?/s*?(>)/ 首先,td匹配掉了標(biāo)簽,后面可以用$1引用,后面的若干屬性被(?:)匹配掉,而最后匹配的>則可以在后面用$2引用。
示意代碼:
str = str.replace(reg,'$1$2');
正則替換特定單詞
來源:正則表達(dá)式,拒絕幾個(gè)單詞的輸入該怎樣表達(dá)?
要求禁止輸入某幾個(gè)單詞,如果拒絕red,yellow,white。這個(gè)帖子到時(shí)不難,但是讓我弄清楚了好幾個(gè)概念。
第一個(gè),小心字符集合里的“或”
/[^red|yellow|white]/ 這個(gè)正則里的所有或都沒有意義,等同于:
/[^redyellowwhite]/ 意思就是不能含有以下列出的所有字母。
正解:
/red|yellow|white/第二個(gè)概念:
只要整個(gè)正則匹配成功,無論子正則表達(dá)式是否匹配成功,括號(hào)都會(huì)捕捉。例如
/(red)|(yellow)|(white)/ 會(huì)捕捉到三個(gè)結(jié)果,盡管實(shí)際上最多只可能有一個(gè)括號(hào)匹配成功。但是只要有一個(gè)匹配到了,兩外兩個(gè)也會(huì)記錄空串。
指定文字高亮顯示
來源:如何用正則把網(wǎng)頁中的指定的字高亮顯示
請(qǐng)教正則表達(dá)式:如何替換搜索結(jié)果中的關(guān)鍵字為高亮顯示?
不勞而獲一次,這個(gè)子虛烏有前輩已經(jīng)給出了非常好的解決方案:我直接把代碼貼出來了:
 

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  2. "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd"
  3. <html xmlns="http://www.w3.org/1999/xhtml"
  4. <head> 
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  6. <META name="Author" content="Sheneyan" /> 
  7. <script type="text/javascript"
  8. function encode(s){ 
  9. return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/([///./*/[/]/(/)/$/^])/g,"//$1"); 
  10. function decode(s){ 
  11. return s.replace(///([///./*/[/]/(/)/$/^])/g,"$1").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); 
  12. function highlight(s){ 
  13. if (s.length==0){ 
  14. alert('搜索關(guān)鍵詞未填寫!'); 
  15. return false
  16. s=encode(s); 
  17. var obj=document.getElementsByTagName("body")[0]; 
  18. var t=obj.innerHTML.replace(/<span/s+class=.?highlight.?>([^<>]*)<//span>/gi,"$1"); 
  19. obj.innerHTML=t; 
  20. var cnt=loopSearch(s,obj); 
  21. t=obj.innerHTML 
  22. var r=/{searchHL}(({(?!//searchHL})|[^{])*){//searchHL}/g 
  23. t=t.replace(r,"<span class='highlight'>$1</span>"); 
  24. obj.innerHTML=t; 
  25. alert("搜索到關(guān)鍵詞"+cnt+"處"
  26. function loopSearch(s,obj){ 
  27. var cnt=0; 
  28. if (obj.nodeType==3){ 
  29. cnt=replace(s,obj); 
  30. return cnt; 
  31. for (var i=0,c;c=obj.childNodes[i];i++){ 
  32. if (!c.className||c.className!="highlight"
  33. cnt+=loopSearch(s,c); 
  34. return cnt; 
  35. function replace(s,dest){ 
  36. var r=new RegExp(s,"g"); 
  37. var tm=null
  38. var t=dest.nodeValue; 
  39. var cnt=0; 
  40. if (tm=t.match(r)){ 
  41. cnt=tm.length; 
  42. t=t.replace(r,"{searchHL}"+decode(s)+"{/searchHL}"
  43. dest.nodeValue=t; 
  44. return cnt; 
  45. </script> 
  46. <style type="text/css"
  47. .highlight{background:green;font-weight:bold;color:white;} 
  48. </style> 
  49. </head> 
  50. <body> 
  51. <form onsubmit="highlight(this.s.value);return false;"
  52. <p><input name="s" id="s" title="搜索內(nèi)容:"/><input type="submit" value="搜索"/></p> 
  53. </form> 
  54. <div id="content"
  55. 測試高亮的代碼。很長很長的代碼…………………… 
  56. </div> 
  57. </body> 
  58. </html> 


刪除標(biāo)簽
來源:如何使用正則表達(dá)式去除大部分HTML標(biāo)記?
刪除除了<img>、<br>、<p>之外所有的標(biāo)簽。子虛烏有給出代碼中關(guān)鍵的一句:
o.innerHTML.replace(/(<//?(?!br|p|img)[^>//]*)//?>/gi,''); 剛開始沒反應(yīng)過來,后來才想起來,這個(gè)正則不用區(qū)分起始和結(jié)束標(biāo)簽。
<//?(?!br|p|img)
匹配除了保護(hù)標(biāo)簽外標(biāo)簽的起始標(biāo)簽或者是結(jié)束標(biāo)簽的一部分。
[^>//]*
匹配到>或者/就結(jié)束。
//?>
起始標(biāo)簽或者結(jié)束標(biāo)簽的結(jié)尾。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: av免费在线观看免费 | 成人性视频免费网站下载软件 | 亚洲va久久久噜噜噜久久男同 | 国产精品hd免费观看 | 热99精品视频 | 成人免费在线视频播放 | hdjapanesemassagehd日本 | 精品一区二区三区免费看 | 日韩精品中文字幕在线播放 | 色中色在线视频 | 国产一区二区观看 | 国产一级一国产一级毛片 | 毛片在哪看 | 免费看欧美一级特黄a毛片 九色com | 97人操| 国产免费让你躁在线视频 | 性欧美xxxx免费岛国不卡电影 | 成人444kkkk在线观看 | 欧洲精品久久久久69精品 | 欧美一区二区三区久久精品视 | 激情小说色 | 看全色黄大色黄大片女图片 | 日韩视频一区 | 欧美日韩网站在线观看 | 护士xxxx | 欧洲黄色一级视频 | 欧美a级大胆视频 | 精品亚洲视频在线 | 婷婷久久综合九色综合色多多蜜臀 | 久久精品国产99国产精品澳门 | 成人片免费视频 | 国产成人强伦免费视频网站 | 黄色成年在线观看 | 91精品国产乱码久久桃 | 史上最强炼体老祖动漫在线观看 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 欧美日韩亚洲成人 | 91免费高清视频 | 日本精品久久久一区二区三区 | 91精品国产综合久久婷婷香 | 久久骚 |