Mám řetězec A a chci vyzkoušet, zda jeho součástí není jiný řetězec B. Toto je velmi jednoduchý regulární výraz, jehož výsledek lze později invertovat.
Mohl bych:
/foobar/.test('[email protected]')
a poté jej invertujte takto:
!(/foobar/).test('[email protected]')
Problém, který mám, je, že to musím udělat v rámci regulárního výrazu a ne s jejich výsledkem. Něco jako:
/!foobar/.test('[email protected]')
(což nefunguje)
Jinými slovy:regulární výraz by měl otestovat neexistenci a v takovém případě vrátit hodnotu true.
Je to možné pomocí JavaScriptu?
Odpověď
Zkuste:
/^(?!.*foobar)/.test('[email protected]')
(krátké) vysvětlení:
^ # start of the string (?! # start negative look-ahead .* # zero or more characters of any kind (except line terminators) foobar # foobar ) # end negative look-ahead
Takže v jednoduché angličtině bude tento regulární výraz vypadat od začátku řetězce, pokud lze „vidět“ řetězec „foobar“. Pokud to lze „vidět“, neexistuje ne * shoda.
* žádná shoda, protože je záporná dívej se dopředu!
Více o těchto předběžných položkách:http://www.regular-expressions.info/lookaround.html Upozorňujeme však, že JavaScript podporuje pouze předběžné pohledy, žádné pohledy-pozadí !