正则表达式由来已久,查找替换功能非常强大,但模板难记复杂。 JavaScript中String对象的match()、replace()这2个方法都要使用正则表达式的模板。当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串。
正则表达式的模板对象//标准写法 (pattern[, flag]); pattern: 模板的用法是关键,也是本章的主要内容。flag: "i"(ignore)、"g"(global)、"m"(multiline)的组合 var reg = ("飞雪","g"); //xx的结果: xx[0]="飞雪" alert(xx); // xx[1]="飞雪"//常用写法 /pattern /[flag]); //去掉引号逗号改用“/”ar reg = /飞雪/g); var str = "风雨送春归飞雪迎春到,飞雪连天向天横"; //xx的结果: xx[0]="飞雪"alert(xx); // xx[1]="飞雪" //省略写法 string.match(/pattern/flag);整个模板对象省略,让JavaScript自动生成//var reg = alert(xx); // xx[1]="飞雪" 
 
模板的语法(即正规表现)//字符串相匹配(包括单个字符)【字符串】 reg = abc/ig); //匹配字符串"abc",多次,大小写不计 reg = abc/ig); xx = "123ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,AbC 注;bca不符合 //多个字符串中任意一个相匹配【|】 reg = abc|xyz/ig); //字符串abc或xyz之间用|分割 注: 【|】不适用于下面的[...]内容reg = abc|xyz/ig); ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,xyz,AbC//字符串中任意一个字符相匹配【[...],[.-.]】 [abc]/ig); //匹配任意一个字符用[...] reg2 = [m-p]/ig); //连续字符串可用减号[.-.] [0-9]/g); //判断是否包含数字 reg4 = [a-z]/ig); //判断是否包含英文字母 //注: 【-】只是用于[...]中reg1 =[abc]/ig); ABCopqbcaLMNAbC".match(reg1); //xx为: A,B,C,b,c,a,A,b,C reg2 = [m-p]/ig);ABCopqbcaLMNAbC".match(reg2); //yy为: o,p,M,N//字符串中任意一个字符不包含匹配【[^...]】 [^abc]/ig);//匹配任意一个字符都不被包含用^ reg2 = [^m-p]/ig); //不包含mnop的任一字符 [^0-9]/g); //判断是否不包含数字 reg4 = [^a-z]/ig); //判断是否不包含英文字母 注: 【^】是在[...]的里面,不是后面所说的【^】在[...]外面reg1 = [^abc]/ig); //xx为: 1,2,3,o,p,q,L,M,N reg3 = [^0-9]/g); //yy为: o,p,q,L,M,N//多个重复字符相匹配【{m,n}】 说明: {m,n}表示从m到n次重复字符相匹配,m,n为大于等于0的整数。{m}和{m,}都是正确的,{ ,n}语法不错,但永远不能匹配 reg1 = {2}/ig); //等价于“/abcc/ig” {1,2}/ig); //等价于“/abc|abcc/ig”reg3 = {0,2}/ig); //等价于“/ab|abc|abcc/ig” {0,}/ig); //匹配ab后面跟任意个c reg5 = {1,}/ig); //匹配ab后面跟一个以上的c 注: 【{m,n}】不适用于[...]中reg1 = {2}/ig); //xx为: ABCC,abcc reg3 = {0,2}/ig);//yy为: ab,ABC,abcc zz = "abA Ba bA b".match(/a {0,}b/ig); //匹配ab之间任意空格。zz为: ab,A B,a b,A b//匹配2位数字。ww为:22,32,98,76//子表达式即字符串的一部分相匹配【(...)】 说明: 对字符串的一部分进行操作,可以用()括起来 reg1 = //等价于“/abcc/ig”,c被重复了2遍 reg2 = (bc){2}/ig); //等价于“/abcbc/ig”,bc被重复了2遍 reg1 = //xx为: null reg2 = (bc){2}/ig); yy = "abcABCbccc".match(reg2);//yy为: ABCbc 
 
通配符//a与t之间有1个字符。xx=act,ant//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); //语法出错(*前面不能有限定符) //ou前面任意个字符。xx=at act ant amou xx = "at act ant amount".match(/.*/gi); //与原字符串相同。xx=at act ant amount //t前面有0个或1个a。xx=at,t,t,t xx = "at act,ant amount".match(/?t/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); //语法出错(*前面无字符) //对“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,t,t,t xx = "atat fatt,gatAT amount".match(/at?/gi);//x=at,at,at,at,AT,a //xx=at,at,,,at,,,,at,AT,,,,,,,, xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT 
 
定位符开始【^】和结束【$】位置如果有\n或\r时,要与配合使用xx = "I am a student".match(/^s/i); //xx=null xx = "I am a student".match(/^i/i); //xx=I //xx=null xx = "I am a \nstudent".match(/^s/mi);//xx=s //xx=null xx = "I am a student".match(/m$/i); //xx=m //xx=null xx = "I am a\n student".match(/a$/mi); //xx=a //xx=null xx = "I am a student".match(/^i/i); //xx=I //xx=null xx = "I am a student".match(/^i.*t$/i); //xx=I am a student 
 
转义字符\b 匹配一个//xx=null xx = "I am a student".match(/\bstu/i); //xx=stu//xx=ent xx = "I am a student".match(/ent\B/i); //xx=null //xx=null xx = "我是(student)学生".match(/ent\B/i); //xx=ent//xx=ent\cA 匹配一个【Ctrl+A】字符。 【数字】。等价于[0-9]。 \D \D除外 \f 匹配一个【换页符】字符。等价于 \x0c 和 \cL。 【换行符】。等价于 \x0a 和 \cJ。 \r 匹配一个【回车符】。等价于 \x0a 和 \cJ。 【空白符】。包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。 \S \D除外 \t 匹配一个【制表符】。等价于 \x09 和 \cI。 【垂直制表符】。等价于\x0b 和 \cK。 \w 匹配一个【英文数字】。等价于[A-Za-z0-9]。 【8进制数字】。\xnnn 匹配一个【16进制数字】。(略)\其它字符(正则表达式使用的符号和单双引号)【\(】【\)】【\[】【\]】【\{】【\}】 【\"】【\’】【\^】【\$】【\\】【\/】
 
模板的语法(即正规表现)//字符串相匹配(包括单个字符)【字符串】 reg = abc/ig); //匹配字符串"abc",多次,大小写不计 reg = abc/ig); xx = "123ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,AbC 注;bca不符合 //多个字符串中任意一个相匹配【|】 reg = abc|xyz/ig); //字符串abc或xyz之间用|分割 注: 【|】不适用于下面的[...]内容reg = abc|xyz/ig); ABCxyzbcaLMNAbC".match(reg); //xx为: ABC,xyz,AbC//字符串中任意一个字符相匹配【[...],[.-.]】 [abc]/ig); //匹配任意一个字符用[...] reg2 = [m-p]/ig); //连续字符串可用减号[.-.] [0-9]/g); //判断是否包含数字 reg4 = [a-z]/ig); //判断是否包含英文字母 //注: 【-】只是用于[...]中reg1 =[abc]/ig); ABCopqbcaLMNAbC".match(reg1); //xx为: A,B,C,b,c,a,A,b,C reg2 = [m-p]/ig);ABCopqbcaLMNAbC".match(reg2); //yy为: o,p,M,N//字符串中任意一个字符不包含匹配【[^...]】 [^abc]/ig);//匹配任意一个字符都不被包含用^ reg2 = [^m-p]/ig); //不包含mnop的任一字符 [^0-9]/g); //判断是否不包含数字 reg4 = [^a-z]/ig); //判断是否不包含英文字母 注: 【^】是在[...]的里面,不是后面所说的【^】在[...]外面reg1 = [^abc]/ig); //xx为: 1,2,3,o,p,q,L,M,N reg3 = [^0-9]/g); //yy为: o,p,q,L,M,N//多个重复字符相匹配【{m,n}】 说明: {m,n}表示从m到n次重复字符相匹配,m,n为大于等于0的整数。{m}和{m,}都是正确的,{ ,n}语法不错,但永远不能匹配 reg1 = {2}/ig); //等价于“/abcc/ig” {1,2}/ig); //等价于“/abc|abcc/ig”reg3 = {0,2}/ig); //等价于“/ab|abc|abcc/ig” {0,}/ig); //匹配ab后面跟任意个c reg5 = {1,}/ig); //匹配ab后面跟一个以上的c 注: 【{m,n}】不适用于[...]中reg1 = {2}/ig); //xx为: ABCC,abcc reg3 = {0,2}/ig);//yy为: ab,ABC,abcc zz = "abA Ba bA b".match(/a {0,}b/ig); //匹配ab之间任意空格。zz为: ab,A B,a b,A b//匹配2位数字。ww为:22,32,98,76//子表达式即字符串的一部分相匹配【(...)】 说明: 对字符串的一部分进行操作,可以用()括起来 reg1 = //等价于“/abcc/ig”,c被重复了2遍 reg2 = (bc){2}/ig); //等价于“/abcbc/ig”,bc被重复了2遍 reg1 = //xx为: null reg2 = (bc){2}/ig); yy = "abcABCbccc".match(reg2);//yy为: ABCbc 
 
通配符//a与t之间有1个字符。xx=act,ant//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); //语法出错(*前面不能有限定符) //ou前面任意个字符。xx=at act ant amou xx = "at act ant amount".match(/.*/gi); //与原字符串相同。xx=at act ant amount //t前面有0个或1个a。xx=at,t,t,t xx = "at act,ant amount".match(/?t/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); //语法出错(*前面无字符) //对“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,t,t,t xx = "atat fatt,gatAT amount".match(/at?/gi);//x=at,at,at,at,AT,a //xx=at,at,,,at,,,,at,AT,,,,,,,, xx = "atat fatt,gatAT amount".match(/(at){2}?/gi);//xx=atat,atAT 
 
定位符开始【^】和结束【$】位置如果有\n或\r时,要与配合使用xx = "I am a student".match(/^s/i); //xx=null xx = "I am a student".match(/^i/i); //xx=I //xx=null xx = "I am a \nstudent".match(/^s/mi);//xx=s //xx=null xx = "I am a student".match(/m$/i); //xx=m //xx=null xx = "I am a\n student".match(/a$/mi); //xx=a //xx=null xx = "I am a student".match(/^i/i); //xx=I //xx=null xx = "I am a student".match(/^i.*t$/i); //xx=I am a student 
 
转义字符\b 匹配一个//xx=null xx = "I am a student".match(/\bstu/i); //xx=stu//xx=ent xx = "I am a student".match(/ent\B/i); //xx=null //xx=null xx = "我是(student)学生".match(/ent\B/i); //xx=ent//xx=ent\cA 匹配一个【Ctrl+A】字符。 【数字】。等价于[0-9]。 \D \D除外 \f 匹配一个【换页符】字符。等价于 \x0c 和 \cL。 【换行符】。等价于 \x0a 和 \cJ。 \r 匹配一个【回车符】。等价于 \x0a 和 \cJ。 【空白符】。包括空格、制表符、换页符等。等价于[\f\n\r\t\v]。 \S \D除外 \t 匹配一个【制表符】。等价于 \x09 和 \cI。 【垂直制表符】。等价于\x0b 和 \cK。 \w 匹配一个【英文数字】。等价于[A-Za-z0-9]。 【8进制数字】。\xnnn 匹配一个【16进制数字】。(略)\其它字符(正则表达式使用的符号和单双引号)【\(】【\)】【\[】【\]】【\{】【\}】 【\"】【\’】【\^】【\$】【\\】【\/】