繁体   English   中英

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

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

通过以下脚本,我尝试检测多次出现的单词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));

你的正则表达式是错误的,你搜索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因为/[blue]+/g;的第一个匹配/[blue]+/g; strethe 请参阅phillip的答案,了解为什么是这样,以及正则表达式应该是什么。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM