使用全局标志,我无法检测到多次出现“蓝色”这个词?

时间:2013-02-24 11:03:02

标签: javascript regex

通过以下脚本,我尝试检测单词blue的多次出现,但它只打印e。这是为什么 ?

var reg_5 = /[blue]+/g;
var str = "Sky was dark and the mood was blue.Sky was dark but the water felt blue.";
document.write("<br / >" + reg_5.exec(str));

3 个答案:

答案 0 :(得分:2)

你的正则表达式错误,你搜索b,l,u或e出现一次或多次。

你的正则表是:

/blue/g

然后使用循环:

var finder = /blue/g;
var result;
while( ( result = finder.exec( str ) ) ){
    console.log( result );
}

只要结果变为null,就需要执行regexp。没有g标志就不会这样。 finder有一个lastIndex属性,指示最后一个匹配的索引,因此如果你想重用regexp而不重新创建它,只需将此属性设置为零。

答案 1 :(得分:1)

丢失角色类

var reg_5 = /blue/g;

答案 2 :(得分:0)

它会打印e,因为/[blue]+/g;str的第一个匹配项是e中的the。请参阅菲利普的回答,了解为什么以及正则表达式应该是什么。

如果您要全局匹配,即查找多个匹配项,并且您没有使用捕获组(),则可以使用match来获取所有匹配项的数组。

var m = str.match( /blue/g );
var n = m == null ? 0 : m.length;

console.log( 'The word "blue" appeared ' + n + ' times.' );