JavaScript:regexp循环内外测试的不同结果



我正在遍历链接,并通过regex选择我需要的内容。

var str = "http://([^.]*).time.com/($|(page/d/))";
var reg = new RegExp(str); var arr = [], l = document.links;
for(var i=0; i<l.length; i++) {
console.log(l[i].href + 'ttt-' + reg.test(l[i].href)); 
}
>...
>http://newsfeed.time.com/page/3/           -false
>...

但是:

/http://([^.]*).time.com/($|(page/d/))/.test('http://newsfeed.time.com/page/3/')
>true

我做错了什么?:)非常感谢。

您需要转义正则表达式的字符串版本中的反斜杠(即使用\d):

var str = "http://([^.]*).time.com/($|(page/\d/))";

因此:

var str = "http://([^.]*).time.com/($|(page/\d/))";
var reg = new RegExp(str); var arr = [], l = ['http://newsfeed.time.com/page/3/'];
for(var i=0; i<l.length; i++) {
    console.log(l[i] + 'ttt-' + reg.test(l[i])); 
}

给出:

http://newsfeed.time.com/page/3/            -true

在字符串中指定正则表达式时,应转义d中的反斜杠。regex文本中不需要这一点,这就是它工作的原因。所以这行:

var str = "http://([^.]*).time.com/($|(page/d/))";

应该是这样的:

var str = "http://([^.]*).time.com/($|(page/\d/))";

最新更新