2011-03-03 24 views
26

sé que hay operadores lógicos tales como | "el operador OR" que pueden ser utilizados como esto:lógica de expresiones regulares y o

earth|world 

Me preguntaba cómo podía comprobar si mi cadena contiene la tierra y el mundo.

cordiales, Alexander

+0

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

Respuesta

34

Si contiene la tierra y el mundo, que contiene uno tras otro, por lo que:

earth.*world|world.*earth 

una alternativa más corta (usando la sintaxis de expresión regular extendida) sería:

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

pero no es en absoluto como un operador and. Solo puede hacer or porque si solo se incluye una de las palabras, no hay ningún pedido involucrado. Si desea tenerlos a ambos, debe indicar el pedido.

+3

Yo no llamaría a la segunda versión hacker - por el contrario, sobre todo si hay más de dos condiciones involucradas, encuentro que las pistas secuenciales son mucho más directas. –

+0

Ese regex parece que podría funcionar muy mal, '/^(?=.*? Earth) (? =. *? World) /' sería mejor. – Walf

3

haga dos pruebas; si la primera falla, la segunda no se ejecuta en javascript. p.ej.

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

no siempre es conveniente, sería bueno saber cómo hacer esto con una expresión regular –

Cuestiones relacionadas