OK, je me sens assez épais en ce moment. Fondamentalement, je veux définir une expression régulière JavaScript qui correspondra à tout sauf em> une chaîne particulière. Donc, disent que j'ai la chaîne ou p> Je veux une seule expression régulière autonome telle qu'elle correspond à la chaîne p > ou la chaîne p> juste pas "chien" ou "chat" seul. J'ai essayé cela, qui dit essentiellement, ignore tout ce qui commence par «Cat» ou «chien», ce qui n'est pas exactement ce dont j'ai besoin ... P> var pattern= /^(?!dog|cat).+/
pattern.test("cat") // false, as expected
pattern.test("dog") // false, as expected
pattern.test("bananananana") // true
pattern.test("dogsled") // false, but the regexp I want would return true
3 Réponses :
Je pense que cela devrait faire le truc:
Ceci correspond à la fois chien code> et chat code>.
Je semble rappeler des assertions négatives à l'avenir ( (?! ...) code>) ne sera pas entièrement pris en charge dans tous les interprètes JavaScript. Une simple négation sur le résultat de la regex devrait également suffire, non? var pattern = /^cat|dog$/;
!pattern.test("cat"); // => false
!pattern.test("dog"); // => false
!pattern.test("bananananana"); // => true
!pattern.test("dogsled"); // => true
Ah bon? Je sais que JavaScript ne supporte pas les points de vue, mais je n'étais au courant d'aucun problème avec des lookaheads (positifs ou négatifs).
J'opter pour annuler tout simplement un match comme il est indiqué dans Linus Kleen de réponse. Toutefois, si vous devez absolument tout faire en regex (ou pour l'expérience d'apprentissage ou quelque chose) alors je pense que ce qui suit devrait fonctionner:
^((dog|cat(?!$)).+|(?!dog|cat).+)$
Excellent. Plus deux (si je pouvais).
@ Eldarerathis - L'exigence de regex que la correspondance ne correspond à des contraintes d'intégration, ce qui convient parfaitement! Une négation simple aurait été ma préférence aussi, mais cela fonctionne. Merci!
+1 pour donner à la regex une go. Tant de Regex Les questions sont simplement "je peux avoir un code de code".
Pourquoi ne pas simplement nier simplement?
! string.match (/ ^ chien | $ $ /) code>@Linuskleen ha ha ha super nom d'utilisateur pour une question de regex :-)
Attendez, pourquoi pas
str! = "Chien" code>?@ Linuskleen- Merci, mais j'essaie explicitement d'éviter la négation de la valeur de retour pour obtenir ce que je veux, c'est-à-dire que je veux une expansion pure qui retournerait vrai ou faux dans l'affaire ci-dessus