รูปแบบ regex JavaScript เชื่อมต่อกับตัวแปร


94

วิธีสร้างรูปแบบ regex ซึ่งเชื่อมต่อกับตัวแปรมีดังนี้:

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

ขอบคุณ

คำตอบ:


150
var re = new RegExp("/\b"+test+"\b/"); 

\bในสตริงลิเทอรัลคืออักขระ backspace เมื่อใส่ regex ในสตริงลิเทอรัลคุณต้องมีการหลีกเลี่ยงอีกรอบ:

var re = new RegExp("\\b"+test+"\\b"); 

(คุณไม่จำเป็นต้องใช้//ในบริบทนี้)


16
newมีหลายสถานที่ที่ตัวสร้างฟังก์ชั่นของในตัวชนิดอาจนำมาใช้ทั้งที่มีหรือไม่มี อย่างไรก็ตามสำหรับความสอดคล้องกับวัตถุอื่น ๆ newที่นี้อาจไม่ถือเป็นจริงและความชัดเจนในการทั่วไปผมมักจะใช้
bobince

1
อีกวิธีหนึ่งคือใช้เครื่องหมายอัญประกาศเดี่ยวเพื่อความชัดเจนดังนั้นคุณจึงไม่จำเป็นต้องหนีจากเครื่องหมายทับ:new RegExp('\b'+test+'\b');
IQAndreas

5
คุณยังต้องหลีกหนีแบ็กสแลช อัญประกาศเดี่ยวไม่มีกฎการหลีกเลี่ยงที่แตกต่างกันสำหรับเครื่องหมายคำพูดคู่ใน JavaScript (ไม่เหมือนเช่น PHP)
Bobince

คำตอบนี้ยังช่วยแก้คำถามเดียวกันเมื่อพยายามใช้ตัวดำเนินการชายแดนกับตัวแปรที่มีฟังก์ชัน. match () และ. replace () JS regexing
HoldOffHunger

สิ่งที่ฉันกำลังมองหา ส่วนเกี่ยวกับWhen putting a regex in a string literal you need one more round of escaping; มีข้อมูลพื้นฐานเกี่ยวกับ (เหตุผล) นี้หรือไม่?
Bas Peeters

10

ด้วย ES2015 (aka ES6) คุณสามารถใช้ตัวอักษรเทมเพลตเมื่อสร้างRegExp :

let test = '53'
const regexp = new RegExp(`\\b${test}\\b`, 'gi') // showing how to pass optional flags
console.log('51, 52, 53, 54'.match(regexp))


3
พิมพ์ผิด: Regexp ต้องเป็น RegExp
NFpeter

9

คุณสามารถใช้ได้

/(^|,)52(,|$)/.test('51,52,53')

แต่ฉันแนะนำให้ใช้

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.