正则表达式 - 检查字符串是否只包含一次模式

时间:2016-11-27 11:01:49

标签: javascript regex

我需要检查字符串是否只包含指定的模式一次。 例如:

pattern = abc
qabce - returns true
qabceabcr - returns false

我试着做这件事:

abc{1}

但如果string至少包含一次模式,则返回true。

2 个答案:

答案 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*/

RegEx Demo

  • ((?!abc)\w)*是0或更多单词char匹配的基于前瞻性的负面评价。它声称下一个位置没有abc
  • (?!.*abc)是负面预测,声称我们前面没有其他abc

答案 1 :(得分:2)

尝试全局g标记

var multipleTimes = "qabceabcr".match(/abc/g).length > 1