如何将循环变量传递给正则表达式?

时间:2013-07-30 19:20:02

标签: javascript

var sourceArray = "un un un deux deux";
var termArray = ["un", "deux"];
var found = 0;

for (var i =0; i < termArray.length; i++) {
        found = sourceArray.match(/termArray[i]/g);
        document.write(found.length);
    }

在上面的代码中,我尝试让termArray [i]从termArray渲染相应的字符串值。但是这些代码不起作用。如何在匹配括号中格式化termArray [i],以便在循环时用字符串值替换?

另外,我应该在document.write行中放置[i]以使其正确循环。 即使它不是“最佳”,也请尽量不要更改代码。

5 个答案:

答案 0 :(得分:1)

如果要使用字符串构建正则表达式,则需要使用RegExp构造函数而不是RegExp文字:

var sourceArray = "un un un deux deux";
var termArray = ["un", "deux"];
var found = 0;

for (var i =0; i < termArray.length; i++) {
    found = sourceArray.match(new RegExp(termArray[i], 'g'));
    document.write(found.length);
}

More info here

答案 1 :(得分:0)

您可以尝试使用RegEx功能:

for (var i = 0; i < 10; i++) {
    var exp = new RegEx('/' + i + '/');
    exp.test('Hello');
}

答案 2 :(得分:0)

尝试创建RegExp对象,而不是使用正则表达式内联:

for (var i =0; i < termArray.length; i++) {
    var pattern = new RegExp(termArray[i], "g");
    var found = sourceArray.match(pattern);
    document.write(found.length);
}

答案 3 :(得分:0)

var sourceArray = "un un un deux deux";
var termArray   = ["un", "deux"];
var found       = 0;

for (var i=0,n=termArray.length; i < n; i++) {
   found = sourceArray.match( termArray[i], "g" ) || [];
   document.write(found.length);
}

  1. termArray.length移至变量n以通过缓存进行优化

  2. 您可以将两个参数传递给match(),第一个是值,第二个是修饰符;应该从内部生成正则表达式对象

  3. 在未找到匹配项时为条件添加了|| [],以便found.length将返回0而不会中断

答案 4 :(得分:0)

这应该只需要很少的改动:

var sourceArray = "un un un deux deux";
var termArray = ["un", "deux"];
var found = 0;

for (var i =0; i < termArray.length; i++) {
    found = sourceArray.match(new RegExp(termArray[i], "g"));
    document.write(found.length);
}

然而,一个小的改进可能是:

var matches = sourceArray.match(new RegExp(termArray.join('|')), 'g');