2

如何使用正则表达式数组并使用“exec”操作迭代该数组。我确实用各种正则表达式初始化了一个数组,如下所示:

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

现在我创建了一个执行此操作的 for 循环:

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

问题是这似乎不起作用。我不想像这样硬编码使用它:

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

使用数组选项时,'.exec' 函数返回 null。当我使用硬编码选项时,它会根据需要返回匹配项。

4

2 回答 2

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()将根据正则表达式是否匹配字符串的一部分返回一个布尔变量。

于 2012-07-15T11:46:31.670 回答
1

您可能想要做的是捕获第一组:

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

顺便说一句:这是我的猜测,不确定您要做什么。但是,如果您尝试获取 URL 的主机名,您应该使用/(http:\/\/(?:.?)\/)/g. 后面的问号.*使前面的量词 ( *) 变得不贪婪。

于 2012-07-15T11:54:26.143 回答