regular - javascript regex example
¿Cómo puedo invertir una expresión regular en JavaScript? (4)
Tengo una cadena A y quiero probar si otra cadena B no es parte de ella. Esta es una expresión regular muy simple cuyo resultado se puede invertir después.
Yo podría hacer:
/foobar/.test(''[email protected]'')
e invertirlo después, así:
!(/foobar/).test(''[email protected]'')
El problema que tengo es que necesito hacerlo dentro de la expresión regular y no con su resultado. Algo como:
/!foobar/.test(''[email protected]'')
(que no funciona)
En otras palabras: la expresión regular debería probar la inexistencia y devolver verdadera en ese caso.
¿Es esto posible con JavaScript?
Aquí hay un ejemplo de una desigualdad. Primero aísto el operador ''<'', luego los operandos ''a'' y ''b''. Básicamente, tomo la expresión directa, la incluyo en paréntesis derechos, invierto la última por ''^'' y finalmente incrusto la expresión resultante entre corchetes, porque ''^'' al principio se interpretaría de manera diferente.
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''
Ps: Acabo de agregar el espacio en blanco en la expresión inversa, para recuperar la coincidencia exacta para los operandos.
Si lo que estás buscando realmente no es más complicado que una cadena simple como "foobar":
if (yourString.indexOf("foobar") === -1) {
// ...
}
Tratar:
/^(?!.*foobar)/.test(''[email protected]'')
Una (breve) explicación:
^ # start of the string
(?! # start negative look-ahead
.* # zero or more characters of any kind (except line terminators)
foobar # foobar
) # end negative look-ahead
Entonces, en inglés simple, esa expresión regular se verá desde el comienzo de la cadena si la cadena ''foobar'' puede ser "vista". Si se puede "ver", no hay * coincidencia.
* ¡no hay coincidencia porque es una mirada negativa hacia adelante!
Más acerca de este aspecto de anticipación: http://www.regular-expressions.info/lookaround.html Pero tenga en cuenta que JavaScript solo admite look-aheads, no look- behinds !
^(?!.*(word1|word2|word3))
coincidirá con una cadena que no contenga ninguna word1
, word2
o word3
(y puede extender la lista indefinidamente). Pero esto también combina cadenas nulas. Para rechazar el uso de nulos
^(?!$)(?!.*(word1|word2|word3))