Domanda

Ho una stringa A e voglio verificare se un'altra stringa B non è parte di esso. Questo è veramente semplice espressione regolare il cui risultato può essere invertito in seguito.

che potevo fare:

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

e capovolgere subito dopo, in questo modo:

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

Il problema che ho è, che ho bisogno di farlo all'interno dell'espressione regolare e non con il loro risultato. Qualcosa di simile:

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

(che non funziona)

In altre parole:. L'espressione regolare deve testare per un non-esistenza e return true in questo caso

Questo è possibile con JavaScript?

È stato utile?

Soluzione

Prova:

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

A (breve) spiegazione:

^          # start of the string 
(?!        # start negative look-ahead
  .*       # zero or more characters of any kind (except line terminators)
  foobar   # foobar
)          # end negative look-ahead

Quindi, in parole povere, che regex sarà dall'inizio della stringa se la stringa 'foobar' può essere "visto". Se può essere "visto" non v'è non * partita.

* non può competere perché è negativo look-ahead!

Ulteriori su questi roba look-ahead: http://www.regular-expressions.info/ lookaround.html Ma noti che JavaScript supporta solo look-aheads, nessun look- behinds

Altri suggerimenti

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

abbinerà una stringa che non contiene nessuna delle word1, word2 o word3 (e si può estendere l'elenco a tempo indeterminato). Ma questo corrisponde anche stringhe nulle. Per rifiutare i null uso

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

Ecco un esempio di una disuguaglianza. Per prima cosa ho isolare l'operatore '<', poi gli operandi 'a' e 'b'. Fondamentalmente, prendo l'espressione diretta, includo in parentesi destra, invertire il secondo di '^' e infine incorporare l'espressione risultante in parentesi quadre, 'causare il '^' all'inizio verrebbe interpretato in modo diverso.

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 .: Ho appena aggiunto lo spazio vuoto nell'espressione inversa, al fine di recuperare la corrispondenza esatta per gli operandi.

Se state cercando davvero non è più complicato di una semplice stringa come "foobar":

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top