1. var rule = /.../;
2. var rule = new RegExp();
今天突然发现的,用第一种方法定义的话,前后2次test的结果一次是true一次是false,用第2种定义2次都是true
貌似2种方法有个差异...
求解~~~~~~
谢谢!!!
2. var rule = new RegExp();
今天突然发现的,用第一种方法定义的话,前后2次test的结果一次是true一次是false,用第2种定义2次都是true
貌似2种方法有个差异...
求解~~~~~~
谢谢!!!
創建對象
var r = new RegExp("表達式","ig");
適合在動態構造匹配對象時使用;
表達式中轉義符需要使用兩次,如\\d;
直接量
var r = /表達式/ig;
使用在任何固定模式的匹配;
当正则中需要用到变量时只能用第二种new RegExp("\b"+word+"\b")
你说的有问题,把代码贴出来啊
这种声明方式,可以用变量动态创建正则,但需要注意两点
1、转义。以字符串形式声明正则,需要用\\表示转义符,否则会报错,比如RegExp("\\d+")表示匹配数字。当然,像\n、\t之类的是可以直接用的,但其中比较特殊的是\b,直接用\b表示退格符,而\\b表示单词边界比如RegExp("\bhello\b", "i")
2、还是转义。当然,这里要说的转义是在动态创建正则表达式时,要对变量进行转义处理,否则变量中含有正则中的元字符,就会导致正则编译错误,比如RegExp("<" + tag + "[^>]*>")来匹配HTML标签时,如果tag变量的内容是"ab(cd"就会报错,所以在动态创建正则时,需要用escape函数对变量进行转义处理RegExp("<" + escape(tag) + "[^>]*>")var rule = /Expression/gmi;
这种正则声明方式中,是不需要对转义符进行特殊处理的,比如/\d+/表示匹配数字,这样正则就比较清晰了,当然,这样又多了一个需要转义的字符/,比如/<\/a>/表示匹配</a>标签,而上一种方式中,是不需要对/进行转义的。
这种正则声明方式简洁,但不能通过变量动态创建正则
你所说的一个结果为true,一个结果为false,应该是你的正则书写问题
两次结果不同可能由于你设了全局模式,然后呢由于lastindex这个属性改变了,所以导致一个是true,而后面的那个是false,发个传送门http://www.dovapour.com.cn/article/20090903200.html如果还不行,希望你把详细部分的代码贴出来看看.
alert(r.test(2));
r.lastIndex = 0;
alert(r.test(3));