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.

Odpowiedzi:


125

Oto czego szukasz:

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

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


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");
}

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);
}

1
function test(string) {
    return ! string.match(/abc|def/);
}

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;
}

0

Można to zrobić na dwa sposoby:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.