它不起作用:
function test(str) {
var vowelsCount = 0;
var arr = str.split('');
var regex = new RegExp(/[aeiou]/, 'gi');
arr.forEach((item, index, array) =>{
if(regex.test(item)){
vowelsCount++;
}
});
return vowelsCount;
}
test('pear tree'); //2,it passes a and the second e
它的工作原理是:
arr.forEach((item, index, array) =>{
var regex = new RegExp(/[aeiou]/, 'gi');
if(regex.test(item)){
vowelsCount++;
}
});
当正则表达式对象在循环外部分配时,为什么不正确?
答案 0 :(得分:2)
因为您使用g
标志。删除全局标志,它将工作。原因是当您在g
变量中使用regex
标记时,您有lastIndex
字段。在不同的数组字符串上使用regex
时,此索引包含不正确的值。在第二个示例中,因为您在每次迭代中定义了新的regex
,并且lastIndex
字段每次都设置为0。您也可以手动重置该索引。
function test(str) {
var vowelsCount = 0;
var arr = str.split('');
var regex = new RegExp(/[aeiou]/, 'gi');
arr.forEach((item, index, array) =>{
if(regex.test(item)){
vowelsCount++;
}
regex.lastIndex = 0
});
return vowelsCount;
}
test('pear tree');