Javascript 正则表达式:包含精确的n次字符串

Javascript 正则表达式:包含精确的n次字符串,javascript,regex,Javascript,Regex,我需要一个正则表达式,当一个字符串包含一个子字符串时它是真的,例如2次。所以 asdgsadg hello asdadsg hello dasadg应该是真的 asdgsadg hello asdadsg hello dasadg hello将为false 当子字符串为hello 不幸的是,我不能做/hello/g和计算长度 谢谢 正则表达式是: /^(?!(.*hello){N+1})(.*hello){N}.*$/ 其中'N+1'=3和'N'=2,如果您希望恰好允许2hello .这就是工

我需要一个正则表达式,当一个字符串包含一个子字符串时它是真的,例如2次。所以

asdgsadg hello asdadsg hello dasadg
应该是真的

asdgsadg hello asdadsg hello dasadg hello
将为false

当子字符串为
hello

不幸的是,我不能做
/hello/g
和计算长度

谢谢

正则表达式是:

/^(?!(.*hello){N+1})(.*hello){N}.*$/
其中
'N+1'=3
'N'=2
,如果您希望恰好允许2
hello

.

这就是工作:

/^(?:(?!\bhello\b).)*(?:\bhello\b(?:(?!\bhello\b).)*){2}$/
var测试=[
“你好,dasadg”,
“asdgsadg你好asdadsg你好dasadg”,
“asdgsadg你好asdadsg你好dasadg你好”,
];
console.log(test.map)(函数(a){
返回a+':'+/^(?:(!\bhello\b)。*(?:\bhello\b(?:(!\bhello\b)。*){2}$/.test(a);

}));这里是迄今为止我找到的最简单的解决方案
/^(.*hello.*){/*此处的捕获量*/}$/g

您是否无意中指的是
子字符串而不是
单词
?我认为字符串正好包含一个单词,例如2次是合适的。
(hello.*{2}
,但由于
*
,它也匹配3次。所以我应该加上“下次不要”之类的话,我猜?!
str.match(/hello/g).length==2有什么问题?console.log('Y'):console.log('N')
?我认为OP不希望这个
asdgsadg hello asdadsg hello dasadghello
匹配。@revo:谁知道?在这种情况下,只需删除单词BoundaryThank!我补充说,包括换行符,它的工作如预期
/^(?)([。\s\s]*你好){3}([。\s\s]*你好){2}[。\s\s]*$/
方括号中的点
是文字,因此它对于
\s
()来说是多余的。只需使用
[\s\s]
;-)这对于
sdfsd hello sfgsdfg hello sdfgdfg hello dfg也是如此,因为2。hello将被计算为
*。
,它将与1匹配。三,。所以它不是精确的n次而是>=n。