有特殊功能的字符都叫做元字符。例如
reg = /c*/;
表示有任意个c,但是如果我们真的想匹配''c*''这个字符串的时候怎么办呢?只要将*转义了就可以了,如下:
[code]
reg = /c\*/;
str=''c*'';
execReg(reg,str);
返回匹配的字符串:c*。
同理,要匹配其他元字符,只要在前面加上一个“\”就可以了。
正则表达式的修饰符
全局匹配,修饰符g
形式:/pattern/g
例子:reg = /b/g;
后面再说这个g的作用。先看后面的两个修饰符。
不区分大小写,修饰符i
形式:/pattern/i
例子:
复制代码 代码如下:
var reg = /b/;
var str = ''BBS'';
execReg(reg,str);
返回null,因为大小写不符合。
复制代码 代码如下:
var reg = /b/i;
var str = ''BBS'';
execReg(reg,str);
匹配到B,这个就是i修饰符的作用了。
行首行尾,修饰符m
形式:/pattern/m
m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。例如:
复制代码 代码如下:
var reg = /^b/;
var str = ''test\nbbs'';
execReg(reg,str);
匹配失败,因为字符串的开头没有b字符。但是加上m修饰符之后:
复制代码 代码如下:
var reg = /^b/m;
var str = ''test\nbbs'';
execReg(reg,str);
匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。
exec方法详解
exec方法的返回值
exec方法返回的其实并不是匹配结果字符串,而是一个对象,简单地修改一下execReg函数,来做一个实验就可以印证这一点:
复制代码 代码如下:
function execReg(reg,str){
var result = reg.exec(str);
alert(typeof result);
}
var reg = /b/;
var str=''bbs.bblueidea.com'';
execReg(reg,str);
结果显示result的类型是object。而且是一个类似数组的对象。使用for in可以知道它的属性: index input 0。其中index是表示匹配在原字符串中的索引;而input则是表示输入的字符串;
至于0则是表示只有一个匹配结果,可以用下标0来引用这个匹配结果,这个数量可能改变。我们可以通过返回值的length属性来得知匹配结果的总数量。
根据以上对返回值的分析,修改execReg函数如下:
复制代码 代码如下:
function execReg(reg,str){
var result = reg.exec(str);
document.write(''index:''+result.index+''<br />''
+''input:''+result.input+''<br />''
);
for(i=0;i<result.length;i++){
document.write(''result[''+i+'']:''+result[i]+''<br />'')
}
}
马上来实验一下:
复制代码 代码如下:
var reg = /\w/;
var str=''bbs.bblueidea.com'';
execReg(reg,str);
结果如下:
index:0
input:bbs.bblueidea.com
result[0]:b
输入字符串为bbs.bblueidea.com;
匹配的b在原字符串的索引是0。
正则的匹配结果为一个,b;
复制代码 代码如下:
var reg = /(\w)(\w)(.+)/;
var str=''bbs.bblueidea.com'';
execReg(reg,str);
结果为:
index:0
input:bbs.bblueidea.com
result[0]:bbs.bblueidea.com
result:b
result:b
result:s.bblueidea.com
由上面两个例子可见,返回对象[0]就是整个正则表达式所匹配的内容。后续的元素则是各个子正则表达式的匹配内容。
exec方法对正则表达式的更新
exec方法在返回结果对象的同时,还可能会更新原来的正则表达式,这就要看正则表达式是否设置了g修饰符。先来看两个例子吧:
复制代码 代码如下:
var reg = /b/;
var str = ''bbs.blueidea.com'';
execReg(reg,str);
execReg(reg,str);
结果如下:
index:0
input:bbs.blueidea.com
result[0]:b
index:0
input:bbs.blueidea.com
result[0]:b
也就是说,两次匹配的结果完全一样,从索引可以看出来,匹配的都是字符串首的b字符。
下面看看设置了g的