bir kelimeyle eşleşmeyecek javascript normal ifadesi


87

Belirli kelimelerle eşleşmeyen bir dizeyi kontrol etmek için bir javascript normal ifadesini nasıl kullanırım?

Örneğin, abcveya içeren bir dize iletildiğinde defyanlış döndüren bir işlev istiyorum .

'abcd' -> yanlış

'cdef' -> yanlış

'bcd' -> doğru

DÜZENLE

Tercihen, [^ abc] gibi basit bir normal ifade istiyorum, ancak ardışık harflere ihtiyacım olduğu için beklenen sonucu vermiyor.

Örneğin. İstiyorummyregex

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

İfade myregex.test('bcd')değerlendirilir true.

Yanıtlar:


127

Aradığınız şey bu:

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

açıklama burada: Bir kelime içermeyen bir satırla eşleşen normal ifade?


1
Beklediğim cevap bu! Teşekkürler. Bir işlev yerine düzenli ifadeye ihtiyacım var. Sorum düzenlendi ve sorumun yeni versiyonunu cevaplamak için cevaplar geldi. Bu yüzden kafa karışıklığını önlemek için "DÜZENLE" kısmı kullandım.
bxx

2
Bütün bir kelimeyle uyuşmayan bir cevap var mı? Örneğiniz "abc", "babc" ve "abcd" nin tümü başarısız olur ve "xyz" geçtiği yerde. Başarısız olmak için "abc" ye, geçmek için "abcd" ye ihtiyacım var. Kaldırılıyor .ve *işe yaramıyor
gman

18
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}

1
Neden normal ifadenize kayıt yapıyorsunuz?
Flimzy

İyi bir nokta! Sanırım yakalamazsam bunun ab (c | d) ef anlamına gelebileceğini düşündüm.
Petar Ivanov

1
/abc|def/g.test(s)Bu durumda bir boole döndürmeyi kullanmak belki daha iyidir ;)
538ROMEO

5

İşte temiz bir çözüm:

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/)muhtemelen burada daha etkilidir
SpliFF

Veya ..return !string.match(...
McKayla

1
Başka iyi bir öneri ... siz :) Kendi cevapları gönderilmesi gerekiyor
Flimzy

0
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}

0

Bu 2 şekilde yapılabilir:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.