regulärer Javascript-Ausdruck, der keinem Wort entspricht

85

Wie überprüfe ich mit einem regulären Javascript-Ausdruck eine Zeichenfolge, die nicht mit bestimmten Wörtern übereinstimmt?

Zum Beispiel möchte ich eine Funktion, die, wenn eine Zeichenfolge übergeben wird, die entweder abcoder enthält def, false zurückgibt.

'abcd' -> false

'cdef' -> false

'bcd' -> wahr

BEARBEITEN

Vorzugsweise möchte ich einen regulären Ausdruck, der so einfach wie [^ abc] ist, aber nicht das erwartete Ergebnis liefert, da ich aufeinanderfolgende Buchstaben benötige.

z.B. Ich willmyregex

if ( myregex.test('bcd') ) alert('the string does not contain abc or def');

Die Aussage myregex.test('bcd')wird ausgewertet true.

bxx
quelle

Antworten:

119

Das suchen Sie:

^((?!(abc|def)).)*$

Die Erklärung ist hier: Regulärer Ausdruck für eine Zeile, die kein Wort enthält?

ssgao
quelle
1
Das ist die Antwort, die ich erwarte! Vielen Dank. Ich brauche eher einen regulären Ausdruck als eine Funktion. Meine Frage wurde bearbeitet und Antworten kamen, um die neue Version meiner Frage zu beantworten. Aus diesem Grund habe ich einen "EDIT" -Teil verwendet, um Verwirrung zu vermeiden.
bxx
2
Gibt es eine Antwort, die nicht mit einem ganzen Wort übereinstimmt? Ihr Beispiel "abc", "babc" und "abcd" schlagen alle fehl und wo als "xyz" vergeht. Ich brauche "abc", um zu scheitern, aber "abcd", um zu bestehen. Entfernen der .und *scheinen nicht zu funktionieren
gman
18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}
Petar Ivanov
quelle
1
Warum erfassen Sie in Ihrer Regex?
Flimzy
Guter Punkt! Ich denke, ich dachte, wenn ich nicht fange, könnte das ab (c | d) ef bedeuten.
Petar Ivanov
1
Es ist vielleicht besser, /abc|def/g.test(s)in diesem Fall einen Booleschen
Wert zurückzugeben
5

Hier ist eine saubere Lösung:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}
Klacks
quelle
1
function test(string) {
    return ! string.match(/abc|def/);
}
Schwach
quelle
1
string.match(/abc|def/)ist hier wahrscheinlich effizienter
SpliFF
Oder ..return !string.match(...
McKayla
1
Ein weiterer guter Vorschlag ... ihr
solltet
0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}
Bemmu
quelle
0

Dies kann auf zwei Arten erfolgen:

if (str.match(/abc|def/)) {
                       ...
                    }


if (/abc|def/.test(str)) {
                        ....
                    } 
Girish Gupta
quelle