ekspresi reguler javascript agar tidak cocok dengan satu kata


87

Bagaimana cara menggunakan ekspresi reguler javascript untuk memeriksa string yang tidak cocok dengan kata tertentu?

Misalnya, saya menginginkan fungsi yang, ketika diteruskan string yang berisi salah satu abcatau def, mengembalikan nilai salah.

'abcd' -> salah

'cdef' -> salah

'bcd' -> benar

EDIT

Lebih disukai, saya ingin ekspresi reguler sesederhana seperti, [^ abc], tetapi tidak memberikan hasil yang diharapkan karena saya membutuhkan huruf berurutan.

misalnya. saya inginmyregex

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

Pernyataan myregex.test('bcd')tersebut dievaluasi ke true.

Jawaban:


127

Inilah yang Anda cari:

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

penjelasannya ada di sini: Ekspresi reguler untuk mencocokkan baris yang tidak mengandung kata?


1
Inilah jawaban yang saya harapkan! Terima kasih. Saya membutuhkan ekspresi reguler daripada fungsi. Pertanyaan saya telah diedit dan jawaban muncul untuk menjawab pertanyaan saya versi baru. Inilah mengapa saya menggunakan bagian "EDIT" untuk menghindari kebingungan.
bxx

2
Apakah ada jawaban yang tidak cocok dengan satu kata? Contoh Anda "abc", "babc" dan "abcd" semuanya gagal dan jika "xyz" lolos. Saya perlu "abc" untuk gagal tapi "abcd" untuk lulus. Menghapus .dan *sepertinya tidak berhasil
gman

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

1
Mengapa Anda menangkap di regex Anda?
Flimzy

Poin bagus! Saya pikir saya pikir jika saya tidak menangkap itu mungkin berarti ab (c | d) ef.
Petar Ivanov

1
Mungkin lebih baik menggunakan /abc|def/g.test(s)yang mengembalikan boolean dalam kasus ini;)
538ROMEO

5

Inilah solusi bersihnya:

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/)mungkin lebih efisien di sini
SpliFF

Atau ..return !string.match(...
McKayla

1
Saran bagus lainnya ... kalian harus memposting jawaban kalian sendiri :)
Flimzy

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

0

Ini dapat dilakukan dengan 2 cara:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.