Frage

Ich habe einen String A und wollen testen, ob eine andere Zeichenfolge B nicht ein Teil davon ist. Das ist ein sehr einfacher regex, dessen Ergebnis anschließend invertiert werden kann.

ich tun konnte:

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

und Invertzucker es danach wie folgt aus:

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

Das Problem, das ich habe, ist, dass ich es im regulären Ausdruck tun muß und nicht mit ihrem Ergebnis. So etwas wie:

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

(was nicht funktioniert)

Mit anderen Worten:. Der reguläre Ausdruck für eine Nicht-Existenz testen soll und return true in diesem Fall

Ist das möglich mit JavaScript?

War es hilfreich?

Lösung

Versuchen Sie:

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

A (kurz) Erklärung:

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

Also, in einfachem Englisch, dass Regex vom Anfang des Strings suchen, wenn die Zeichenfolge ‚foobar‘ kann „gesehen“ werden. Wenn es kann "gesehen" werden, gibt es nicht * Spiel.

* keine Übereinstimmung, weil es negativ Vorgriff!

Weitere Informationen zu diesem Vorgriff stuff: http://www.regular-expressions.info/ lookaround.html aber zu beachten, dass JavaScript nur Look-aheads, keine Look- behinds

unterstützt

Andere Tipps

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

wird eine Zeichenfolge übereinstimmen, die nicht von word1 enthält, word2 oder word3 (und Sie können die Liste erweitern auf unbestimmte Zeit). Aber das paßt auch null Saiten. So weisen nulls Verwendung

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

Hier ist ein Beispiel für eine Ungleichheit. Zunächst isolieren ich den Operator ‚<‘, später die Operanden ‚a‘ und ‚b‘. Grundsätzlich nehme ich den direkten Ausdruck, sind sie in der rechten Klammern, Invertzuckersirup dieser durch ‚^‘ und schließlich einbetten den resultierenden Ausdruck in eckigen Klammern, weil die ‚^‘ am Anfang anders interpretiert werden würde.

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 .: Ich habe gerade den Leerraum in der inversen Ausdruck hinzugefügt, um eine exakte Übereinstimmung für die Operanden abgerufen werden.

Wenn das, was Sie wirklich ist momentan mehr sind nicht komplizierter als eine einfache Zeichenfolge wie „Foobar“:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top