wyrażenie regularne javascript, aby nie dopasować słowa

87

Jak użyć wyrażenia regularnego javascript, aby sprawdzić ciąg, który nie pasuje do określonych słów?

Na przykład chcę funkcji, która po przekazaniu ciągu zawierającego albo abcalbo def, zwraca fałsz.

„abcd” -> false

„cdef” -> fałsz

„bcd” -> prawda

EDYTOWAĆ

Preferuję wyrażenie regularne tak proste, jak np. [^ Abc], ale nie daje ono oczekiwanego wyniku, ponieważ potrzebuję kolejnych liter.

na przykład. chcęmyregex

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

Instrukcja myregex.test('bcd')jest oceniana na true.

bxx
źródło

Odpowiedzi:

125

Oto czego szukasz:

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

wyjaśnienie jest tutaj: Wyrażenie regularne do dopasowania wiersza, który nie zawiera słowa?

ssgao
źródło
1
To jest odpowiedź, której oczekuję! Dzięki. Potrzebuję raczej wyrażenia regularnego niż funkcji. Moje pytanie zostało zredagowane i pojawiły się odpowiedzi, aby odpowiedzieć na nową wersję mojego pytania. Dlatego użyłem części „EDYTUJ”, aby uniknąć nieporozumień.
bxx
2
Czy istnieje odpowiedź, która nie pasuje do całego słowa? Twoje przykładowe „abc”, „babc” i „abcd” zawodzą, a „xyz” przechodzi. Potrzebuję „abc”, aby się nie udać, ale „abcd”, aby przejść. Usuwanie .i *nie wydaje się działać
gman
18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}
Petar Iwanow
źródło
1
Dlaczego przechwytujesz w swoim wyrażeniu regularnym?
Flimzy
Słuszna uwaga! Myślę, że pomyślałem, że jeśli nie uchwycę, może to oznaczać ab (c | d) ef.
Petar Iwanow
1
W /abc|def/g.test(s)tym przypadku może lepiej użyć tego zwracającego wartość logiczną;)
538ROMEO
5

Oto czyste rozwiązanie:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}
NoBrainer
źródło
1
function test(string) {
    return ! string.match(/abc|def/);
}
Flimzy
źródło
1
string.match(/abc|def/)jest prawdopodobnie bardziej wydajna tutaj
SpliFF
Albo ...return !string.match(...
McKayla,
1
Kolejna dobra sugestia ... powinniście zamieścić własne odpowiedzi :)
Flimzy
0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}
Bemmu
źródło
0

Można to zrobić na dwa sposoby:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Girish Gupta
źródło