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]以使其正确循环。 即使它不是“最佳”,也请尽量不要更改代码。
答案 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);
}
答案 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);
}
将termArray.length
移至变量n
以通过缓存进行优化
您可以将两个参数传递给match()
,第一个是值,第二个是修饰符;应该从内部生成正则表达式对象
在未找到匹配项时为条件添加了|| []
,以便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');