Совпадение с выражением без << или]]

Мне нужно соответствовать шаблону, только если << или же >> или же ]] или же [[ нет в строке.

Если присутствует какой-либо из этих специальных символов, совпадение должно быть равно нулю, иначе оно должно совпадать.

Например, у меня есть выражение Stackru который должен вернуться как матч, но если у меня есть Stack]]over<<flow Я не должен получить правдивый ответ. Следующий шаблон, к сожалению, не работает:

/^(\[\[)|(\]\])|(\<\<)|(\>\>)

Спасибо

1 ответ

Решение

Используйте следующее регулярное выражение и отрицайте результат:

<<|>>|\]\]|\[\[

Вот живой пример:

var regex = /<<|>>|\]\]|\[\[/;
var strings = [
  "Stackru",
  "Stack]]over<<flow"
];

for(var i=0; i<strings.length; i++) {
  console.log(!regex.test(strings[i]));
}


Если вы не можете отменить результат (например, при использовании Angular's ng-pattern), вы также можете использовать негативный взгляд:

^((?!<<|>>|\]\]|\[\[).)*$

Вот живой пример:

var regex = /^((?!<<|>>|\]\]|\[\[).)*$/;
var strings = [
  "Stackru",
  "Stack]]over<<flow"
];

for(var i=0; i<strings.length; i++) {
  console.log(regex.test(strings[i]));
}

Другие вопросы по тегам