Pregunta

Tengo una cadena A y quiero probar si otra cadena B no es parte de ella. Esto es muy expresiones regulares simples cuyo resultado puede ser invertida después.

lo que podía hacer:

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

e invertirla después, como esto:

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

El problema que tengo es que tengo que hacerlo dentro de la expresión regular y no con su resultado. Algo así como:

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

(que no funciona)

En otras palabras:. La expresión regular debe probar para un no-existencia y de vuelta verdad en ese caso

¿Es esto posible con JavaScript?

¿Fue útil?

Solución

Probar:

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

A (corto) 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

Por lo tanto, en la llanura Inglés, que se verá expresiones regulares desde el inicio de la cadena si la cadena 'foobar' puede ser "visto". Si puede ser "visto" existe no * partido.

* no puede competir porque es negativa look-ahead!

Más información sobre este material de preanálisis: http://www.regular-expressions.info/ lookaround.html Pero Tenga en cuenta que sólo es compatible con JavaScript look-aheads, sin Look- traseros

Otros consejos

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

coincidirá con una cadena que no contiene ninguno de word1, word2 o word3 (y se puede ampliar la lista indefinidamente). Pero esto también coincide con cadenas nulas. Para rechazar el uso nulos

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

Este es un ejemplo de una desigualdad. Primero aislar al operador '<', más tarde los operandos 'a' y 'b'. Básicamente, me tomo la expresión directa, incluyo en paréntesis derecha, invertir esta última por '^' y, finalmente, incrustar la expresión resultante entre corchetes, 'hacer que el '^' al principio sería interpretado 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'

P.s .: Acabo de añadir el espacio en blanco en la expresión inversa, con el fin de recuperar la coincidencia exacta de los operandos.

Si lo que estás buscando en realidad no es más complicado que una simple cadena como "foobar":

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top