我需要检查字符串是否只包含指定的模式一次。 例如:
pattern = abc
qabce - returns true
qabceabcr - returns false
我试着做这件事:
abc{1}
但如果string至少包含一次模式,则返回true。
答案 0 :(得分:2)
你可以检查匹配数组的长度,如果它是1
,那么它是一个有效的输入;
function isValid(str) { return (str.match(/abc/g) || []).length; }
然后将其用作:
isValid('foobar')
//=> 0 - Bad
isValid('qabce')
//=> 1 - Good
isValid('qabceabcr')
//=> 2 - Bad
如果你想要一个纯正则表达式解决方案,那么你可以使用这个负前瞻性正则表达式:
/\b((?!abc)\w)*abc(?!.*abc)\w*/
((?!abc)\w)*
是0或更多单词char匹配的基于前瞻性的负面评价。它声称下一个位置没有abc
(?!.*abc)
是负面预测,声称我们前面没有其他abc
。答案 1 :(得分:2)
尝试全局g
标记
var multipleTimes = "qabceabcr".match(/abc/g).length > 1