Question

J'ai une chaîne A et que vous souhaitez tester si une autre chaîne B ne fait pas partie de celui-ci. C'est un très simple, regex dont le résultat peut être inversé par la suite.

Je pourrais faire:

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

et inverser ensuite, comme ceci:

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

Le problème que j'ai est, que je dois le faire dans l'expression régulière et non pas avec leur résultat. Quelque chose comme:

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

(qui ne fonctionne pas)

En d'autres termes:. L'expression régulière doit tester une non-existence et de retour vrai dans ce cas

Est-ce possible avec JavaScript?

Était-ce utile?

La solution

Essayez:

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

A (courte) explication:

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

Donc, en clair, que regex se penchera dès le début de la chaîne si la chaîne « toto » peut être « vu ». Si elle peut être "vu" il y a pas * correspondance.

* pas de match parce qu'il est négatif look-ahead!

En savoir plus sur ce genre de choses look-ahead: http://www.regular-expressions.info/ lookaround.html Mais Notez que JavaScript ne supporte que regarder, pas discontinues effectuées look- behinds

Autres conseils

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

correspondra à une chaîne qui ne contient pas de word1, word2 ou word3 (et vous pouvez prolonger indéfiniment la liste). Mais cela correspond aussi à des chaînes nulles. Pour rejeter l'utilisation de valeurs NULL

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

Voici un exemple d'une inégalité. D'abord, j'isole l'opérateur « < », plus tard, les opérandes « a » et « b ». Au fond, je prends l'expression directe, inclure dans parenthèses droite, inverser celle-ci par « ^ » et, enfin, l'expression résultante l'intégrer entre crochets, parce que le « ^ » au début sera interprété différemment.

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 .: Je viens d'ajouter l'espace vide dans l'expression inverse, afin de récupérer une correspondance exacte pour les opérandes.

Si ce que vous recherchez est vraiment pas plus compliqué qu'une simple chaîne comme « foobar »:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top