使用全局标志,我无法检测单词'blue'

With the global flag I am unable to detect multiple occurrences of the word 'blue'?

本文关键字:检测 单词 blue 全局 标志      更新时间:2023-09-26

通过下面的脚本,我试图检测单词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));

您的regexp错误,您搜索的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而不重新创建它,只需将此属性设置回零即可。

失去字符类

var reg_5 = /blue/g;

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

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

var m = str.match( /blue/g );
var n = m == null ? 0 : m.length;
console.log( 'The word "blue" appeared ' + n + ' times.' );