2016-11-27 3 views
0

Мне нужно проверить, что строка содержит указанный шаблон только один раз. Например:regex - проверьте, что строка содержит шаблон только один раз

pattern = abc 
qabce - returns true 
qabceabcr - returns false 

Я пытался сделать эту вещь:

abc{1} 

но он возвращает истину, если строка содержит шаблон, по крайней мере один раз.

ответ

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 или более символов слова. Он утверждает, что следующая позиция не имеет abc
  • (?!.*abc) отрицательный взгляд, который утверждает, что у нас нет другого abc впереди в слове.
+0

@ user2417883: Помогла ли эта работа вне дома? – anubhava

2

Попробуйте глобальный g флаг

var multipleTimes = "qabceabcr".match(/abc/g).length > 1 
Смежные вопросы