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.

bxx
sumber

Jawaban:

127

Inilah yang Anda cari:

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

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

ssgao.dll
sumber
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");
}
Petar Ivanov
sumber
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);
}
NoBrainer
sumber
1
function test(string) {
    return ! string.match(/abc|def/);
}
Flimzy
sumber
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;
}
Bemmu
sumber
0

Ini dapat dilakukan dengan 2 cara:

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


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