2012-07-15 109 views
2

如何使用Regex表达式数组并使用'exec'操作来迭代该数组。我做初始化各种正则表达式像这样的数组:for循环,这是否通过Javascript中的正则表达式数组迭代遍历

var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 

现在,我创建了一个:

for(i=0;i<arrRegex.length;i++){ 
    arrRegex[i].exec(somestring); 
} 

的事情是,这似乎并不工作。我不想使用它硬编码是这样的:

(/(http:\/\/(?:.*)\/)/g).exec(somestring); 

当使用阵列选项,“.exec”函数返回空值。当我使用硬编码选项时,它会按照我的意愿返回匹配项。

+0

该exec不会返回匹配,因为它应该,但它与硬编码。 matches = null – 2012-07-15 11:37:08

回答

2

exec()返回匹配,所以你应该能够捕获它。

somestring = 'http://stackoverflow.com/questions/11491489/iterate-through-regular-expression-array-in-javascript'; 
var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 
for (i = 0; i < arrRegex.length; i++) { 
    match = arrRegex[i].exec(somestring); 
} 

match是一个数组,结构如下:

{ 
    [0] = 'string matched by the regex' 
    [1] = 'match from the first capturing group' 
    [2] = 'match from the second capturing group' 
    ... and so on 
} 

看看这个的jsfiddle http://jsfiddle.net/HHKs2/1/

您还可以使用test()代替exec()exec() != null的简写。 test()将返回一个布尔变量,具体取决于正则表达式是否匹配字符串的一部分。

+0

我知道这一点,并且它在硬编码时工作得很好,但是当我在你的代码中使用正则表达式时,它会返回null。我在Chrome浏览器上使用它 – 2012-07-15 11:50:53

+0

看看我发布的jsFiddle链接,它使用数组方式并返回结果。或者你是指从字符串初始化表达式?顺便说一句,你也可以使用'test()'而不是'exec()'作为'exec()!= null'的缩写。 'test()'将返回一个布尔变量,取决于正则表达式是否匹配字符串的一部分。 – Dreen 2012-07-15 11:55:21

+0

如果你所说的是正确的,那么这里的测试如何返回false:http://jsfiddle.net/IdanShechter/uLMBL/ – 2012-07-15 12:08:57

1

什么你可能想要做的是拍摄第一组:

for(i=0;i<arrRegex.length;i++){ 
    var someotherstring = arrRegex[i].exec(somestring)[1]; 
    // do something with it ... 
} 

BTW:那是我的猜想,不知道你正在尝试做的。但是,如果您尝试获取URL的主机名,则应使用/(http:\/\/(?:.?)\/)/g.*之后的问号使前面的量词(*)不合格。

+0

test()函数如何返回false,它应该返回true,因为有匹配http:/ /jsfiddle.net/IdanShechter/uLMBL/ – 2012-07-15 12:12:57

+0

那么,你的代码在这里工作 - 即使在Chrome中。你能否给我们多一点上下文,比如'exec()'结果的左边赋值。或者您可以提供您正在使用的实际相关代码。 – 2012-07-15 13:55:56