第7章 正则表达式
--JAVASCRIPT 内置支持正则表达式已经很久了,甚至要久于一些高级语言,如JAVA.
定义:
var reCat = new RegExp("cat","gi");
var reCat = /Cat/gi;
简单模式:
元字符: +*/ ([]{}) /^$
转义: var reQMark = //?/;
var reQMark = new RegExp("//?");
字符类:用于测试字符的组合
1 简单类: /[bcf]at/gi;
2 负向类: [^bc]at;
3 范围类: [a-z];
4 组合类: [A-M1-4/n]
5 预定义类:
.
/d ,/D
/s ,/S
/w ,/W
量词:指定特定模式出现的次数
1 简单量词: ? * + {n} {n,m} {n,}
2 贪婪的/惰性的/支配性的量词: */*?/*+
分组:通过一系统括号包围一系列字符,字符类以及量词来使用的
var reDog = /(Dog){2}/g;
var re = /(mom( and dad)?)/;
反向引用:存储在分组里面的特殊值
var s = "#123456";
var re = /#(/d+)/;
alert(re.test(s));
alert(RegExp.$1);
候选:
var s1 = "red";
var s2 = "blue";
var re = /(red|blue)/;
alert(re.test(s1));
alert(re.test(s2));
非捕获性分组:创建反向引用 的分组,称之为捕获性分组.还有一种非捕获性分组,不会创
建反向引用.
前瞻(lookahead):告诉正则表达式向前看而不移动其位置.
var s3 = "bedroom";
var s4 = "bedding";
var re = /(bed(?=room))/;
alert(re.text(s3));
alert(re.text(s4));
alert(RegExp.$1);
var s3 = "bedroom";
var s4 = "bedding";
var re = /(bed(?!room))/;
alert(re.text(s3));
alert(re.text(s4));
alert(RegExp.$1);
边界:^ $ /b /B
var s = "Important word is the last one.";
var re = /(/w+)/.$/;
alert(re.test(s));
alert(RegExp.$1);
var s1 = "first second third fourth fifth sixth"
var re1 = /(/w+)/g;
var aWords = s1.match(re1);
for(i=0;i<aWords.length;i++){
document.write(aWords[i]);
}
多行模式:var re1 = /(/w+)$/gm;
var s1 = "first second/nthird fourth/nfifth sixth"
var re1 = /(/w+)$/gm;
var aWords = s1.match(re1);
for(i=0;i<aWords.length;i++){
document.write(aWords[i]);
}