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

时间:2013-08-27 22:17:21

标签: javascript 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 + '\t\t\t-' + 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

我做错了什么? :)谢谢。

2 个答案:

答案 0 :(得分:1)

当您在字符串中指定正则表达式时,应该在\d中转义反斜杠。这在正则表达式文字中是不需要的,这就是它起作用的原因。所以这一行:

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

应如下所示:

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

答案 1 :(得分:1)

你需要在正则表达式的字符串版本中转义反斜杠(即使用\\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] + '\t\t\t-' + reg.test(l[i])); 
}

给出:

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