นิพจน์ทั่วไปคืออะไร (ใน JavaScript หากมีความสำคัญ) ที่จะจับคู่เฉพาะถ้าข้อความนั้นตรงทั้งหมด? นั่นคือไม่ควรมีอักขระพิเศษที่ปลายอีกด้านของสตริง
ตัวอย่างเช่นถ้าฉันพยายามที่จะตรงกับabc
แล้ว1abc1
, 1abc
และabc1
จะไม่ตรงกับ
นิพจน์ทั่วไปคืออะไร (ใน JavaScript หากมีความสำคัญ) ที่จะจับคู่เฉพาะถ้าข้อความนั้นตรงทั้งหมด? นั่นคือไม่ควรมีอักขระพิเศษที่ปลายอีกด้านของสตริง
ตัวอย่างเช่นถ้าฉันพยายามที่จะตรงกับabc
แล้ว1abc1
, 1abc
และabc1
จะไม่ตรงกับ
คำตอบ:
ใช้ตัวคั่นเริ่มต้นและตัวสิ้นสุด: ^abc$
^abc def ghi$
/^(?:abc|def)$/
/^(abc|def)$/
มิฉะนั้นหากไม่ได้ใช้กลุ่ม/^abc|def$/
จะจับคู่abc
ที่จุดเริ่มต้นของสตริงหรือdef
ท้ายของสตริง
มันขึ้นอยู่กับ. คุณทำได้
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
"^" สำหรับจุดเริ่มต้นของบรรทัด "$" สำหรับจุดสิ้นสุดของบรรทัด เช่น.:
var re = /^abc$/;
จะตรงกับ "abc" แต่ไม่ใช่ "1abc" หรือ "abc1" คุณสามารถเรียนรู้เพิ่มเติมได้ที่https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
\babc\b
ซึ่งจะช่วยให้เช่น123 abc 123
เพื่อให้ตรงกับabc
(แต่ไม่ใช่ตัวอย่างเชิงลบเช่นในคำถาม); อย่างไรก็ตาม^abc$
จะตรวจสอบให้แน่ใจว่าa
เป็นจุดเริ่มต้นของสตริงและc
ท้ายที่สุดมิฉะนั้นจะไม่ตรงกัน