Как я могу инвертировать регулярное выражение в JavaScript? - PullRequest
43 голосов
/ 08 октября 2009

У меня есть строка A, и я хочу проверить, не является ли другая строка B ее частью. Это очень простое регулярное выражение, результат которого можно впоследствии инвертировать.

Я мог бы сделать:

/foobar/.test('foobar@bar.de')

и затем инвертируйте его так:

!(/foobar/).test('foobar@bar.de') 

Проблема в том, что мне нужно делать это в пределах регулярного выражения, а не с их результатом. Что-то вроде:

/!foobar/.test('foobar@bar.de')

(который не работает)

Другими словами: регулярное выражение должно проверять отсутствие и возвращать true в этом случае.

Возможно ли это с помощью JavaScript?

Ответы [ 4 ]

59 голосов
/ 08 октября 2009

Попробуйте:

/^(?!.*foobar)/.test('foobar@bar.de')

A (короткое) объяснение:

^          # start of the string 
(?!        # start negative look-ahead
  .*       # zero or more characters of any kind (except line terminators)
  foobar   # foobar
)          # end negative look-ahead

Итак, на простом английском языке, это регулярное выражение будет выглядеть с начала строки, если строку 'foobar' можно «увидеть». Если это «видно», то совпадение отсутствует *.

* нет совпадения, потому что это отрицательно заблаговременно!

Подробнее об этом прогнозном материале: http://www.regular -expressions.info / lookaround.html Но учтите, что JavaScript поддерживает только прогнозирование, без просмотра - отскок !

1 голос
/ 26 октября 2015

Вот пример неравенства. Сначала я выделяю оператор «

var _str = "a < b" ;
var _op = /</g ;
var _no_op = /[^(<|\ )]/g ;
console.log( _str, _str.match( _op ) ); // get '<'
console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'

P.s .: Я просто добавил пробел в обратном выражении, чтобы получить точное совпадение для операндов.

1 голос
/ 07 декабря 2014
^(?!.*(word1|word2|word3))

будет соответствовать строке, которая не содержит ни word1, word2, ни word3 (и вы можете расширять список до бесконечности). Но это также соответствует пустым строкам. Чтобы отклонить нули, используйте

^(?!$)(?!.*(word1|word2|word3))  
0 голосов
/ 08 октября 2009

Если то, что вы ищете, на самом деле не сложнее, чем простая строка типа "foobar":

if (yourString.indexOf("foobar") === -1) {
  // ...
}

http://www.w3schools.com/jsref/jsref_indexOf.asp

...