นิพจน์ทั่วไปของ JavaScript เพื่อไม่ให้ตรงกับคำ

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

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

'abcd' -> เท็จ

'cdef' -> เท็จ

'bcd' -> จริง

แก้ไข

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

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

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

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


person bxx    schedule 23.06.2011    source แหล่งที่มา


คำตอบ (5)


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

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

ส่วน ?! เรียกว่า การยืนยัน lookahead เชิงลบ . แปลว่าไม่ตามมา..

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

person ssgao    schedule 19.03.2013
comment
นี่คือคำตอบที่ฉันคาดหวัง! ขอบคุณ. ฉันต้องการนิพจน์ทั่วไปมากกว่าฟังก์ชัน คำถามของฉันได้รับการแก้ไขแล้วและมีคำตอบขึ้นมาเพื่อตอบคำถามเวอร์ชันใหม่ของฉัน นี่คือเหตุผลที่ฉันใช้ส่วนแก้ไขเพื่อหลีกเลี่ยงความสับสน - person bxx; 21.03.2013
comment
มีคำตอบที่ไม่ตรงกับทั้งคำหรือไม่? ตัวอย่างของคุณ abc, babc และ abcd ทั้งหมดล้มเหลวและเมื่อ xyz ผ่านไป ฉันต้องการให้ abc ล้มเหลว แต่ abcd จึงจะผ่าน การลบ . และ * ดูเหมือนจะไม่ทำงาน - person gman; 02.01.2017

นี่เป็นวิธีแก้ปัญหาที่สะอาด:

function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}
person NoBrainer    schedule 10.10.2012

ซึ่งสามารถทำได้ 2 วิธี:

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


if (/abc|def/.test(str)) {
                        ....
                    } 
person Girish Gupta    schedule 17.06.2015

person    schedule
comment
เหตุใดคุณจึงจับภาพใน regex ของคุณ - person Flimzy; 23.06.2011
comment
จุดดี! ฉันคิดว่าฉันคิดว่าหากฉันไม่จับมันอาจหมายถึง ab(c|d)ef - person Petar Ivanov; 23.06.2011
comment
อาจจะดีกว่าถ้าใช้ /abc|def/g.test(s) ที่ส่งคืนบูลีนในกรณีนี้ ;) - person GLAND_PROPRE; 06.01.2019

person    schedule
comment
string.match(/abc|def/) น่าจะมีประสิทธิภาพมากกว่าที่นี่ - person SpliFF; 23.06.2011
comment
คำแนะนำดีๆ อีกข้อครับ...เพื่อนๆ ควรโพสต์คำตอบของตัวเองนะครับ :) - person Flimzy; 23.06.2011