จับคู่สตริงทั้งหมด


165

นิพจน์ทั่วไปคืออะไร (ใน JavaScript หากมีความสำคัญ) ที่จะจับคู่เฉพาะถ้าข้อความนั้นตรงทั้งหมด? นั่นคือไม่ควรมีอักขระพิเศษที่ปลายอีกด้านของสตริง

ตัวอย่างเช่นถ้าฉันพยายามที่จะตรงกับabcแล้ว1abc1, 1abcและabc1จะไม่ตรงกับ


5
สำหรับผู้ที่ยังใหม่กับ regex มีสองคำตอบที่ดีสำหรับเรื่องนี้ขึ้นอยู่กับสิ่งที่คุณกำลังมองหา ผู้ถามต้องการจริงๆ\babc\bซึ่งจะช่วยให้เช่น123 abc 123เพื่อให้ตรงกับabc(แต่ไม่ใช่ตัวอย่างเชิงลบเช่นในคำถาม); อย่างไรก็ตาม^abc$จะตรวจสอบให้แน่ใจว่าaเป็นจุดเริ่มต้นของสตริงและcท้ายที่สุดมิฉะนั้นจะไม่ตรงกัน
Andrew

คำตอบ:


305

ใช้ตัวคั่นเริ่มต้นและตัวสิ้นสุด: ^abc$


3
@ เจคฉันดีใจที่คำตอบทำงานได้ดี แต่ฉันคิดว่าคุณควรทราบว่ามันจะใช้ได้เฉพาะเมื่อ abc เป็นเพียงรายการเดียวในสตริง ตัวอย่างเช่นมันจะไม่ตรงกับ 'ตัวอักษร 3 ตัวแรกในตัวอักษรคือ abc'
จับคู่

สิ่งนี้ใช้ได้ผลสำหรับฉันบางทีตัวอย่างของฉันน่าจะเป็น "abc def ghi" เป็นเป้าหมายการแข่งขัน
Jake Pearson

@ เจคถ้าสตริงของคุณคือ "abc def ghi" ดังนั้น / ^ abc $ / จะไม่ทำงาน เช่นjsfiddle.net/XUyAc
matchew

2
ฉันเข้าใจแล้วถ้าฉันต้องการจับคู่ "abc def ghi" regex ของฉันจะเป็น^abc def ghi$
Jake Pearson

2
หมายเหตุ: เพื่อให้รูปแบบที่มี alternations ตรงกับสตริงทั้งก็อาจจะมีความจำเป็นที่จะห่อมันด้วย (ไม่ใช่) กลุ่มจับ: หรือ/^(?:abc|def)$/ /^(abc|def)$/มิฉะนั้นหากไม่ได้ใช้กลุ่ม/^abc|def$/จะจับคู่abcที่จุดเริ่มต้นของสตริงหรือdefท้ายของสตริง
Wiktor Stribiżew

40

มันขึ้นอยู่กับ. คุณทำได้

string.match(/^abc$/)

แต่นั่นจะไม่ตรงกับสตริงต่อไปนี้: 'ตัวอักษร 3 ตัวแรกของตัวอักษรเป็น abc ไม่ได้ abc123 '

ฉันคิดว่าคุณต้องการใช้\b(ขอบเขตของคำ):

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

ตัวอย่างสด: http://jsfiddle.net/uu5VJ/

หากวิธีการแก้ไขปัญหาเดิมนั้นเหมาะกับคุณฉันจะแนะนำไม่ให้ใช้งาน

นั่นหมายความว่าคุณอาจมีสิ่งต่อไปนี้:

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

ในขณะที่คุณสามารถใช้

if (str[i].match(/^abc$/g)) {
    //do something 
}

มันจะใช้ทรัพยากรมากขึ้น สำหรับฉันกฎทั่วไปของหัวแม่มือสำหรับการเปรียบเทียบสตริงง่าย ๆ ใช้การแสดงออกตามเงื่อนไขสำหรับรูปแบบไดนามิกมากขึ้นใช้การแสดงออกปกติ

ข้อมูลเพิ่มเติมเกี่ยวกับ JavaScript regexes: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


12
@NiharSawant เป็นเพราะนี่ไม่ใช่คำตอบสำหรับคำถามที่ OP ถาม OP ชัดเจนไม่ต้องการจับคู่ "'ตัวอักษร 3 ตัวแรกของตัวอักษรคือ abc" และวิธีที่สองที่นี่ไม่ทำงานสำหรับการจับคู่ regexes ทั่วไปเช่น / ^ [abc] + $ /
DJClayworth

15

"^" สำหรับจุดเริ่มต้นของบรรทัด "$" สำหรับจุดสิ้นสุดของบรรทัด เช่น.:

var re = /^abc$/;

จะตรงกับ "abc" แต่ไม่ใช่ "1abc" หรือ "abc1" คุณสามารถเรียนรู้เพิ่มเติมได้ที่https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

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