js中match、replace方法中使用正則表達式

js中match、replace方法中使用正則表達式

  (2012-06-29 14:23:37)
正則表達式由來已久,查找替換功能很是強大,但模板難記複雜。
javascript中的string對象的match()、repalce()這2個方法都要使用正則表達式的模版。
當模版內容與字符串不相匹配時,match()返回null,replace()返回源字符串原字符串。
正則表達式的模板對象
//標準寫法 regexp = new RegExp(pattern[, flag]); pattern: 
模板的用法是關鍵,也是本章的主要內容。 flag: "i"(ignore)、"g"(global)、"m"(multiline)的組合 i-忽略大小寫,g-反覆檢索,m-多行檢索flag中沒有g時,返回字符串,有g時返回字符串數組
var reg = new RegExp("飛雪","g"); 
var str = "風雨送春歸飛雪迎春到,飛雪連天向天橫"; 
var xx = str.(str.match(reg)); //xx的結果: xx[0]="飛雪" alert(xx); // xx[1]="飛雪"
//經常使用寫法 regexp = new RegExp(/pattern /[flag]); //去掉引號逗號改用「/」
ar reg = new RegExp(/飛雪/g); 
var str = "風雨送春歸飛雪迎春到,飛雪連天向天橫"; 
var xx = str.(str.match(reg)); //xx的結果: xx[0]="飛雪" 
alert(xx); // xx[1]="飛雪"
//省略寫法 
string.match(/pattern/flag);整個模板對象省略,讓JavaScript自動生成
//var reg = new RegExp(/飛雪/g); 
var str = "風雨送春歸飛雪迎春到,飛雪連天向天橫"; 
var xx = str.(str.match(/飛雪/g)); //xx的結果: xx[0]="飛雪"
 alert(xx); // xx[1]="飛雪"

 

模板的語法(即正規表現)
//字符串相匹配(包括單個字符)【字符串】 
reg = new RegExp(/abc/ig); //匹配字符串"abc",屢次,大小寫不計
reg = new RegExp(/abc/ig);
 xx = "123ABCxyzbcaLMNAbC".match(reg); //xx爲: ABC,AbC 注;bca不符合
//多個字符串中任意一個相匹配【|】 
reg = new RegExp(/abc|xyz/ig); 
//字符串abc或xyz之間用|分割 注: 【|】不適用於下面的[...]內容
reg = new RegExp(/abc|xyz/ig); 
xx = "123ABCxyzbcaLMNAbC".match(reg); //xx爲: ABC,xyz,AbC
//字符串中任意一個字符相匹配【[...],[.-.]】
reg1 = new RegExp(/[abc]/ig); //匹配任意一個字符用[...] 
reg2 = new RegExp(/[m-p]/ig); //連續字符串可用減號[.-.] 
reg3 = new RegExp(/[0-9]/g); //判斷是否包含數字 
reg4 = new RegExp(/[a-z]/ig); //判斷是否包含英文字母 
//注: 【-】只是用於[...]中
reg1 = new RegExp(/[abc]/ig); 
xx = "123ABCopqbcaLMNAbC".match(reg1); //xx爲: A,B,C,b,c,a,A,b,C 
reg2 = new RegExp(/[m-p]/ig); 
yy = "123ABCopqbcaLMNAbC".match(reg2); //yy爲: o,p,M,N
//字符串中任意一個字符不包含匹配【[^...]】 
reg1 = new RegExp(/[^abc]/ig); //匹配任意一個字符都不被包含用^ 
reg2 = new RegExp(/[^m-p]/ig); //不包含mnop的任一字符
 reg3 = new RegExp(/[^0-9]/g); //判斷是否不包含數字 
reg4 = new RegExp(/[^a-z]/ig); //判斷是否不包含英文字母 
注: 【^】是在[...]的裏面,不是後面所說的【^】在[...]外面
reg1 = new RegExp(/[^abc]/ig); 
xx = "123ABCopqbcaLMN".match(reg1); //xx爲: 1,2,3,o,p,q,L,M,N 
reg3 = new RegExp(/[^0-9]/g); 
yy = "123opqLMN".match(reg3); //yy爲: o,p,q,L,M,N
//多個重複字符相匹配【{m,n}】 
說明: {m,n}表示從m到n次重複字符相匹配,m,n爲大於等於0的整數。{m}和{m,}都是正確的,{ ,n}語法不錯,但永遠不能匹配 
reg1 = new RegExp(/abc{2}/ig); //等價於「/abcc/ig」
 reg2 = new RegExp(/abc{1,2}/ig); //等價於「/abc|abcc/ig」 
reg3 = new RegExp(/abc{0,2}/ig); //等價於「/ab|abc|abcc/ig」
 reg4 = new RegExp(/abc{0,}/ig); //匹配ab後面跟任意個c 
reg5 = new RegExp(/abc{1,}/ig); //匹配ab後面跟一個以上的c 
注: 【{m,n}】不適用於[...]中
reg1 = new RegExp(/abc{2}/ig); 
xx = "abcABCCabccc".match(reg1); //xx爲: ABCC,abcc 
reg3 = new RegExp(/abc{0,2}/ig); 
yy = "abxABCCabccc".match(reg3); //yy爲: ab,ABC,abcc 
zz = "abA Ba bA b".match(/a {0,}b/ig); //匹配ab之間任意空格。zz爲: ab,A B,a b,A b 
ww = "aa1bb22cc321dd9876".match(/[0-9]{2}/g); //匹配2位數字。ww爲:22,32,98,76
//子表達式即字符串的一部分相匹配【(...)】 
說明: 對字符串的一部分進行操做,能夠用()括起來 reg1 = new RegExp(/abc{2}/ig); //等價於「/abcc/ig」,c被重複了2遍 
reg2 = new RegExp(/abc{2}/ig); //等價於「/abcbc/ig」,bc被重複了2遍
reg1 = new RegExp(/abc{2}/ig); xx = "abcABCbccc".match(reg1); //xx爲: null 
reg2 = new RegExp(/abc{2}/ig); yy = "abcABCbccc".match(reg2); //yy爲: ABCbc

 

通配符
//匹配單個任意字符(不包括/n)【.】
xx = "at act ant amount".match(/a.t/gi); //a與t之間有1個字符。xx=act,ant 
xx = "at act ant amount".match(/a....t/gi); //a與t之間有4個字符。xx=amount
//任意匹配字符或字符串【*】等價於{0,}
「*」星號前面至少必須有一個字符,任意匹配時能夠用「.」代替字符 「*」星號前面不能用限定符{...}及其簡寫形式
xx = "at act ant amount".match(/a*t/gi); //t前面任意個a。xx=at,t,t,t 
xx = "at act ant amount".match(/a.*t/gi); //a與t之間任意個字符。xx=at,act,ant,amount xx = "at act ant amount".match(gi); //語法出錯(*前面不能有限定符)
xx = "at act ant amount".match(/.*ou/gi); //ou前面任意個字符。xx=at act ant amou 
xx = "at act ant amount".match(/.*/gi); //與原字符串相同。xx=at act ant amount
//子表達式的任意匹配【?】等價於{0,1}
「?」問號前面至少必須有一個字符,任意匹配時能夠用「.」代替字符 「?」問號前面沒有用(...)將子表達式括起來,「?」至關於「*」,而不是「.」 「?」問號的主要做用是對(...){.,.}操做
xx = "at act,ant amount".match(/a?t/gi); //t前面有0個或1個a。xx=at,t,t,t 
xx = "at act,ant amount".match(/?t/gi); //語法出錯(*前面無字符)
xx = "at act,ant amount".match(/a{1}?/gi); //對「a{1}」的結果匹配。xx=a,a,a,a
//子表達式的1次以上匹配【+】等價於{1,}
「+」加號前面至少必須有一個字符,也能夠用「.」代替字符 「+」加號前面沒有用(...)將子表達式括起來,「+」至關於「?」或「*」,而不是「.」
xx = "at act,ant amount".match(/a+t/gi); //t前面有1個以上的a。xx=at 
xx = "at act,ant amount".match(/+t/gi); //語法出錯(*前面無字符) 
xx = "at act,ant amount".match(/a{1}+/gi); //對「a{1}」的結果匹配。xx=a,a,a,a
//通酡符小結
「.」匹配的字符是任意的,與符號前面的字符沒有關係 「?」匹配的字符或字符串與其前面字符或子表達式有關 「.」匹配一個字符,而與「*」、「+」和「?」結合後,能匹配0個或多個 「?」前面沒有(...)子表達式時,匹配的是前一個字符 「?」前面有(...)子表達式時,匹配的是前一個子表達式 「?」前面有{m,n}限定符時,匹配的個數就是{m,n}指定的個數
xx = "at act,ant amount".match(/a.t/gi); //xx=act,ant 
xx = "at act,ant amount".match(/a?t/gi); //xx=at,,a,,t,,a,,t,,a,,,,,t, 
xx = "at act,ant amount".match(/a*t/gi); //xx=at,t,t,t 
xx = "atat fatt,gatAT amount".match(/at?/gi); //x=at,at,at,at,AT,a 
xx = "atat fatt,gatAT amount".match(/(at)?/gi); //xx=at,at,,,at,,,,at,AT,,,,,,,, 
xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT

 

定位符
開始【^】和結束【$】位置若是有/n/r時,要與multiLine配合使用
xx = "I am a student".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i/i); //xx=I 
xx = "I am a /nstudent".match(/^s/i); //xx=null 
xx = "I am a /nstudent".match(/^s/mi); //xx=s 
xx = "I am a student".match(/m$/i); //xx=null 
xx = "I am a student".match(/m$/i); //xx=m 
xx = "I am a/n student".match(/a$/i); //xx=null 
xx = "I am a/n student".match(/a$/mi); //xx=a 
xx = "I am a student".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i/i); //xx=I 
xx = "I am a /nstudent".match(/^s/i); //xx=null 
xx = "I am a student".match(/^i.*t$/i); //xx=I am a student

 

轉義字符
/b 匹配一個【單詞邊界】(例:回車、換行、空格、逗號)。 /B /b除外
xx = "I am a student".match(/stu/b/i); //xx=null 
xx = "I am a student".match(//bstu/i); //xx=stu 
xx = "I am a student".match(/ent/b/i); //xx=ent 
xx = "I am a student".match(/ent/B/i); //xx=null 
xx = "我是學生".match(/學生/B/i); //xx=null 
xx = "我是(student)學生".match(/ent/B/i); //xx=ent 
xx = "我是student學生".match(/ent/B/i); //xx=ent
/cA 匹配一個【Ctrl+A】字符。 
/d 匹配一個【數字】。等價於[0-9]。 
/D /D除外 /f 匹配一個【換頁符】字符。等價於 /x0c 和 /cL。 
/n 匹配一個【換行符】。等價於 /x0a 和 /cJ。 
/r 匹配一個【回車符】。等價於 /x0a 和 /cJ。 
/s 匹配一個【空白符】。包括空格、製表符、換頁符等。等價於[/f/n/r/t/v]。 
/S /D除外 /t 匹配一個【製表符】。等價於 /x09 和 /cI。 
/v 匹配一個【垂直製表符】。等價於/x0b 和 /cK。 
/w 匹配一個【英文數字】。等價於[A-Za-z0-9]。 
/W /w除外 /onnn 匹配一個【8進制數字】 
/xnnn 匹配一個【16進制數字】
相關文章
相關標籤/搜索