1
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] 以便在循环时将其替换为字符串值?

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

4

5 回答 5

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);
}

更多信息在这里

于 2013-07-30T19:22:35.713 回答
0

您可以尝试使用该RegEx功能:

for (var i = 0; i < 10; i++) {
    var exp = new RegEx('/' + i + '/');
    exp.test('Hello');
}
于 2013-07-30T19:22:27.577 回答
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');
于 2013-07-30T19:34:05.317 回答
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);
}
于 2013-07-30T19:23:06.480 回答
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. 在未找到匹配项时添加了一个|| []for 条件,以便found.length返回0并且不会中断

于 2013-07-30T19:24:14.213 回答