biểu thức chính quy javascript để không khớp với một từ


87

Làm cách nào để sử dụng một biểu thức javascript để kiểm tra một chuỗi không khớp với các từ nhất định?

Ví dụ: tôi muốn một hàm, khi được truyền vào một chuỗi có chứa hoặc abchoặc def, trả về false.

'abcd' -> false

'cdef' -> false

'bcd' -> true

BIÊN TẬP

Tốt hơn là tôi muốn một biểu thức chính quy đơn giản như một cái gì đó như, [^ abc], nhưng nó không mang lại kết quả như mong đợi vì tôi cần các chữ cái liên tiếp.

ví dụ. tôi muốnmyregex

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

Câu lệnh myregex.test('bcd')được đánh giá là true.

Câu trả lời:


124

Đây là những gì bạn đang tìm kiếm:

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

giải thích ở đây: Biểu thức chính quy để khớp với một dòng không chứa một từ?


1
Đây là câu trả lời mà tôi mong đợi! Cảm ơn. Tôi cần một biểu thức chính quy hơn là một hàm. Câu hỏi của tôi đã được chỉnh sửa và câu trả lời được đưa ra để trả lời phiên bản mới cho câu hỏi của tôi. Đây là lý do tại sao tôi sử dụng một phần "EDIT" để tránh nhầm lẫn.
bxx

2
Có câu trả lời nào không khớp với cả một từ không? Ví dụ "abc", "babc" và "abcd" của bạn đều không thành công và "xyz" vượt qua. Tôi cần "abc" để không thành công nhưng "abcd" để vượt qua. Loại bỏ .*dường như không hoạt động
gman

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

1
Tại sao bạn lại chụp trong regex của mình?
Flimzy

Điểm tốt! Tôi nghĩ tôi đã nghĩ nếu tôi không nắm bắt nó có thể có nghĩa là ab (c | d) ef.
Petar Ivanov

1
Đó là có lẽ tốt hơn để sử dụng /abc|def/g.test(s)mà trả về một boolean trong trường hợp này;)
538ROMEO

5

Đây là một giải pháp sạch:

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/)ở đây có lẽ hiệu quả hơn
SpliFF

Hoặc ..return !string.match(...
McKayla

1
Một gợi ý tốt ... các bạn nên gửi câu trả lời của riêng bạn :)
Flimzy

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

0

Điều này có thể được thực hiện theo 2 cách:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.