2013-07-30 53 views
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行中,让它正确循环。 即使它不是“最佳”,请尽量不要更改代码。

回答

1

如果你想使用建立一个正则表达式,你需要使用正则表达式的构造函数,而不是一个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

+0

Aaa所以这是关于使用构造函数而不是文字。感谢您的回答以及所有已回答的问题。我很惊讶document.write(found.length);无需指定[i]即可正确迭代。这是为什么 ? – Benj

+0

@Benj您在每次迭代中都替换了'found'的值,因此它只包含当前迭代的值,并且没有关于其他迭代的信息。 – Paulpro

+0

嗯补充正则表达式找到确切的字符串与^和$:如在found = sourceArray.match(新RegExp('\\ ^'+ termArray [i] +'\\ $','g'));我相信这是正确的语法,它返回“未捕获的类型错误:不能读取null的属性'长度'。任何线索为什么? Tks – Benj

0

您可以尝试使用RegEx功能:

for (var i = 0; i < 10; i++) { 
    var exp = new RegEx('/' + i + '/'); 
    exp.test('Hello'); 
} 
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); 
} 
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(),第一值,则该第二改性剂; RegExp对象应该由它们产生的内部

  3. 增加对条件|| []时没有找到匹配,使found.length将返回0,而不是打破

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'); 
相关问题