จาวาสคริปต์นิพจน์ทั่วไปไม่ตรงกับคำ


87

ฉันจะใช้นิพจน์ทั่วไปของจาวาสคริปต์เพื่อตรวจสอบสตริงที่ไม่ตรงกับคำบางคำได้อย่างไร

ตัวอย่างเช่นฉันต้องการฟังก์ชันที่เมื่อส่งผ่านสตริงที่มีabcหรือdefส่งกลับเท็จ

'abcd' -> เท็จ

'cdef' -> เท็จ

'bcd' -> จริง

แก้ไข

โดยเฉพาะอย่างยิ่งฉันต้องการนิพจน์ทั่วไปที่เรียบง่ายเหมือนอย่างเช่น [^ abc] แต่มันไม่ได้ผลลัพธ์ที่คาดหวังเนื่องจากฉันต้องการตัวอักษรที่ต่อเนื่องกัน

เช่น. ฉันต้องการmyregex

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

คำสั่งที่ได้รับการประเมินเพื่อmyregex.test('bcd')true

คำตอบ:


128

นี่คือสิ่งที่คุณกำลังมองหา:

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

คำอธิบายอยู่ที่นี่: นิพจน์ทั่วไปเพื่อจับคู่บรรทัดที่ไม่มีคำ?


1
นี่คือคำตอบที่ฉันคาดหวัง! ขอบคุณ. ฉันต้องการนิพจน์ทั่วไปมากกว่าฟังก์ชัน คำถามของฉันได้รับการแก้ไขและมีคำตอบเพื่อตอบคำถามเวอร์ชันใหม่ของฉัน นี่คือเหตุผลที่ฉันใช้ส่วน "แก้ไข" เพื่อหลีกเลี่ยงความสับสน
bxx

2
มีคำตอบที่ไม่ตรงกับคำทั้งหมดหรือไม่? ตัวอย่างของคุณ "abc", "babc" และ "abcd" ทั้งหมดล้มเหลวและเมื่อ "xyz" ผ่านไป ฉันต้องการ "abc" ถึงจะล้มเหลว แต่ "abcd" ถึงจะผ่าน การถอด.และ*ดูเหมือนจะไม่ทำงาน
gman

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

1
ทำไมคุณถึงจับภาพใน regex ของคุณ
Flimzy

จุดดี! ฉันคิดว่าฉันคิดว่าถ้าฉันไม่จับภาพมันอาจหมายถึง ab (c | d) ef
Petar Ivanov

1
อาจจะดีกว่าถ้าใช้/abc|def/g.test(s)ที่ส่งคืนบูลีนในกรณีนี้;)
grobouDu06


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

1
string.match(/abc|def/)น่าจะมีประสิทธิภาพมากกว่าที่นี่
SpliFF

หรือ ..return !string.match(...
McKayla

1
อีกข้อเสนอแนะที่ดี ... พวกคุณควรโพสต์คำตอบของคุณเอง :)
Flimzy


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.