Javascript 使用全局标志时,我无法检测单词';蓝色';?
通过下面的脚本,我尝试检测单词Javascript 使用全局标志时,我无法检测单词';蓝色';?,javascript,regex,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)); var reg_5=/[blue]+/g; var str=“天空是黑暗的,心情是蓝色的。天空是黑暗的
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));
var reg_5=/[blue]+/g;
var str=“天空是黑暗的,心情是蓝色的。天空是黑暗的,但水是蓝色的。”;
写(“
”+reg_5.exec(str));
丢失字符类
var reg_5=/blue/g代码>您的regexp错误,您搜索的b、l、u或e出现一次或多次
您的regexp应该是:
/blue/g
然后使用循环:
var finder = /blue/g;
var result;
while( ( result = finder.exec( str ) ) ){
console.log( result );
}
只要结果变为null,就需要执行regexp。如果没有g标志,它就不会像这样工作。finder有一个lastIndex属性,它指示最后一个匹配的索引,因此如果您想重用regexp而不重新创建它,只需将此属性设置回零即可。它打印e
,因为/[blue]+/gstr
中的code>是中的e
。请参阅phillip的答案,了解原因以及正则表达式应该是什么
如果您正在进行全局匹配,即查找多个匹配,并且您没有使用捕获组()
,则可以使用match
获取所有匹配的数组
var m = str.match( /blue/g );
var n = m == null ? 0 : m.length;
console.log( 'The word "blue" appeared ' + n + ' times.' );
这仍然只能找到第一个实例,因为他使用的.exec()
没有循环