2011-03-03 5 views
26

Je sais qu'il ya des opérateurs logiques tels que | « l'opérateur OR » qui peut être utilisé comme ceci:logique regexp et ou

earth|world 

Je me demandais comment je pouvais vérifier si ma chaîne contient la terre et du monde.

salutations, alexander

+0

double http://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator – kjy112

Répondre

34

Si elle contient la terre et dans le monde, il contient un après l'autre, donc:

earth.*world|world.*earth 

une alternative plus courte (en utilisant la syntaxe regex étendue) serait:

/(?=.*earth)(?=.*world).*/ 

Mais ce n'est pas du tout comme un opérateur and. Vous pouvez seulement faire or parce que si un seul des mots est inclus, il n'y a aucun ordre impliqué. Si vous voulez les avoir tous les deux, vous devez indiquer la commande.

+3

Je ne dirais pas la deuxième version hackish - au contraire, surtout si plus que deux conditions sont impliquées, je trouve les retards séquentiels beaucoup plus simple. –

+0

Cette regex a l'air d'avoir de très mauvais résultats, '/ ^(?=.*? Earth) (? =. *? World) /' serait meilleur. – Walf

3

Cette question a été posée et répondu ici:

Regular Expressions: Is there an AND operator?

Il n'y a pas un opérateur direct "et", mais vous pouvez continuer les tests d'expression et d'assurer la seconde l'expression est également une correspondance.

3

faire deux tests, si le premier échoue le second ne s'exécute pas en javascript. par exemple.

var hasBoth = /earth/i.test(aString) && /world/i.test(aString); 
+1

pas toujours pratique, il serait bon de savoir comment faire cela avec une regex –