Как инвертировать регулярное выражение в JavaScript?

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

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

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

и переверните его потом, вот так:

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

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

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

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

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

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

4 ответов


попробуй:

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

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

^          # 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 поддерживает только смотри-ка, не смотри -зад!


^(?!.*(word1|word2|word3))

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

^(?!$)(?!.*(word1|word2|word3))  

вот пример неравенства. Сначала я изолирую оператор"

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.: Я просто добавил пустое пространство в обратном выражении, чтобы получить точное соответствие для операндов.


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

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

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