Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用全局标志时,我无法检测单词';蓝色';?_Javascript_Regex - Fatal编程技术网

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()
没有循环