正则表达式是由字符串所组成的表达式,用于匹配、替换或者查找特定的字符串。
实例说明:
var searchPattern = new RegExp('s+');
等价于 var searchPattern = /s+/;
表达式中的加号表示字符s必须在字符串中显示1次以上。而字符串(/s+/)中的斜杠表示这是一个正则表达式,不是其它类的对象。
RegExp对象中只有两个实现方法:test和exec。test方法将判断以参数传入的字符串是否与正则表达式匹配。
如:var re = /JavaScript rules/;
var str = "JavaScript rules";
if(re.test(str)){alert("匹配");}
正则表达式的匹配过程是区分大小写的,如果表达式是/javascript rules/,那么结果是不匹配。如果希望不区分大小写进行匹配,那么可以在正则表达式后面添加字符i。
如下:var re = /Javascript rules/i;
i选项是正则表达式匹配的标识符,用来强制匹配过程忽略大小写。此外还有全局匹配g标识,多行匹配的m标识。
全局匹配是查找与正则表达式匹配的所有字符,而忽略正则表达式的位置。如果不适用全局匹配选项,那么只会返回第一个匹配项。多行匹配选项m可以使用与行相关的字符,例如^表示一行的开始,$表示一行的结束,以便在多行的字符串中进行匹配。如果是RegExp对象实例,那么第二个参数表示匹配选项。
如:var searchPattern = new RegExp('s+','g');
实例:
<script text="text/javascript">
var re = new RegExp("JS*","ig");
var str = "cfdsJS *(&YJSjs 888JS";
var resultArray = re.exec(str);
while(resultArray){
document.writeln(resultArray[0]);
document.writeln(" next match starts at "+ re.lastIndex +"<br/>");
resultArray = re.exec(str);
}
</script>
运行结果:
分析:正则表达式首写是字母J,接着是任何数量的字母S.由于使用了选项i,所以匹配过程中忽略大小写,因此也会查找到js字符串。并且由于设置了选项g,RegExp中lastIndex属性会设置为匹配字符中最后一个字符的下一个位置,所以每次exec调用都会查找下一个匹配。该实例中共查找到了4次匹配,当没有匹配时,返回的为null。
exec方法返回一个数组,但是数组元素并不是所有的匹配项,而是当前匹配项和所有带圆括号的字符串。如果在表达式中使用圆括号引用正则表达式的某部分,那么匹配的时候,这些括号所匹配的字符串也会体现在返回的数组中。
实例:
var re = /(ds)+(j+s)/ig;
var str = "cfdsJS *(&dsjjjsYJSjs 888dsdsJS)";
var resultArray = re.exec(str);
while(resultArray){
document.writeln(resultArray[0]);
document.writeln("next match starts at "+re.lastIndex+"<br/>");
for(var i = 1; i < resultArray.length; i++){
document.writeln("substring of "+resultArray[i]+"<br/>");
}
document.writeln("<br/>");
resultArray = re.exec(str);
}
运行结果:
正则表达式应用
反斜杠,也称转义符,用来对字符进行转义。两种用途:①\s表示特殊字符(空格、制表符、换行符)②\+表示+,将特殊符转换成一般符号。
实例:
<script text="text/javascript">
function matchString(){
var regExp = /\s\*/g;
var str = "This *is *a *test *string";
var resultString = str.replace(regExp,'-');
alert(resultString);
}
</script>
<body onload = "matchString()">
</body>
运行结果:
正则表达式中关于匹配字符出现次数的4种字符:星号(*)表示字符出现零次或多次;加号(+)表示字符出现一次或多次;问号(?)表示字符出现零次或一次;点号(.)表示字符只出现一次。
实例:
<script text="text/javascript">
var regExp = /:\D*\s\d+\s\d+/;
var str = "This is a date:March 12 2009";
var resultString = str.match(regExp);
alert("Date"+resultString);
</script>
结果:
分析:该正则表达式的第一个字符是冒号,接着是反斜杠和大写字母D,即\D,用来表示查找任何非数字符号;接着的星号表示匹配任何数量的非数字符号。接下来的部分是空格符(\s),然后是\d。与\D不同的是,小写的\d表示只匹配数字。加号表匹配一个或多个数字。接着又是一个空格符,以及又一个\d+。
\D等效于[^0-9]
\d等效于[0-9]
匹配大小写字符:[A-Za-z]
\w表示任何数字或字母,包括下划线
^和$可以表示一行的开始和结束