[英]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;
在str
是e
中the
。 请参阅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.