使用全局标志,我无法检测单词'blue'
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));
您的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.' );
相关文章:
- 如何检测是否有溢出
- 如何检测用于WebGL的专用或集成显卡
- 当鼠标悬停在文本中的单词上时显示警报
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 使用javascript来检测单词是否不可用
- 如果将检测到请求中,则取消加载页面”;一些单词"镀铬加长件
- 给点击的单词加下划线,以及检测加下划线的单词(HTML、JS或CSS)
- 检测一旦某个单词刚刚被输入到文本区域
- 使用regex检测每个单词的第一个字母是否在上
- 检测段落中一个或多个单词的子字符串
- 如何使用jquery检测选中的单词并更改输入字段的背景
- 如何检测文本框中最后键入的单词?
- jQuery -检测特定的单词与.keypress功能
- 检测文本框是否不包含某些单词
- 使用全局标志,我无法检测单词'blue'
- jQuery-检测字符串中特定长度的单词
- 如何检测单词的换行位置
- 在光标下检测单词