正则表达式是由字符串所组成的表达式,用于匹配、替换或者查找特定的字符串。
实例说明:
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*sd+sd+/; 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表示任何数字或字母,包括下划线
^和$可以表示一行的开始和结束