ตัวอย่างเช่น:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
แต่แน่นอนว่าไม่ได้ผล :) มีวิธีการทำเช่นนี้หรือไม่?
ตัวอย่างเช่น:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
แต่แน่นอนว่าไม่ได้ผล :) มีวิธีการทำเช่นนี้หรือไม่?
คำตอบ:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
ต่อความคิดเห็นบางส่วนจึงเป็นสิ่งสำคัญที่จะต้องทราบว่าคุณอาจต้องการที่จะหลบหนีตัวแปรถ้ามีที่มีศักยภาพสำหรับเนื้อหาที่เป็นอันตราย (เช่นตัวแปรมาจากการป้อนข้อมูลของผู้ใช้)
ในปี 2019 นี้มักจะเขียนโดยใช้แม่แบบสตริงและรหัสข้างต้นได้รับการปรับปรุง คำตอบเดิมคือ:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
การแสดงออก
/\w+\//i
จะกลายเป็นnew RegExp("\\w+/", "i")
คุณสามารถใช้วัตถุ RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
จากนั้นคุณสามารถสร้างregexstring
ในแบบที่คุณต้องการ
ในการสร้างนิพจน์ทั่วไปจากตัวแปรใน JavaScript คุณจะต้องใช้RegExp
Constructor กับพารามิเตอร์สตริง
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
แน่นอนว่านี่เป็นตัวอย่างที่ไร้เดียงสามาก โดยถือว่าinput
เป็นสิ่งที่ถูกหลบหนีอย่างเหมาะสมสำหรับการแสดงออกปกติ หากคุณจัดการกับการป้อนข้อมูลของผู้ใช้หรือเพียงแค่ต้องการความสะดวกในการจับคู่อักขระพิเศษคุณจะต้องหลีกเลี่ยงอักขระพิเศษ :
function regexEscape(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
input = regexEscape(input);
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
ReGeX
ข้อความ ดังนั้นฉันจึงใช้:return new RegExp(input, flags);
หากคุณใช้ตัวอักษรเทมเพลต es6 เป็นตัวเลือก ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); ส่งออก const validatePassword = value => value.match (newRegExp); `` `
"ReGeX" + testVar + "ReGeX"
คุณสามารถให้การแสดงออกปกติเป็นสตริงคือ คุณอาจต้องหลีกเลี่ยงอักขระบางตัวที่อยู่ในสายอักขระ (เช่นอัญประกาศคู่) แต่โดยส่วนใหญ่แล้วจะเทียบเท่ากัน
คุณยังสามารถใช้ตัวRegExp
สร้างเพื่อส่งผ่านค่าสถานะใน ( ดูเอกสาร )
คุณสามารถสร้างนิพจน์ทั่วไปใน JS ได้สองวิธี:
/ab{2}/g
new RegExp("ab{2}", "g")
.ตัวอักษรนิพจน์ปกติเป็นค่าคงที่และไม่สามารถใช้กับตัวแปรได้ สิ่งนี้สามารถทำได้โดยใช้ตัวสร้าง การแตกหักของตัวสร้าง RegEx คือ
new RegExp(regularExpressionString, modifiersString)
คุณสามารถฝังตัวแปรเป็นส่วนหนึ่งของ regularExpressionString ตัวอย่างเช่น,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
สิ่งนี้จะตรงกับลักษณะของลวดลายcdcdcd
ใด ๆ
นี่คือฟังก์ชั่นที่ไร้ประโยชน์ซึ่งจะคืนค่าที่ห่อหุ้มด้วยอักขระเฉพาะ :)
jsfiddle: https://jsfiddle.net/squadjot/43agwo6x/
function getValsWrappedIn(str,c1,c2){
var rg = new RegExp("(?<=\\"+c1+")(.*?)(?=\\"+c2+")","g");
return str.match(rg);
}
var exampleStr = "Something (5) or some time (19) or maybe a (thingy)";
var results = getValsWrappedIn(exampleStr,"(",")")
// Will return array ["5","19","thingy"]
console.log(results)
คำตอบที่ยอมรับไม่ได้ผลสำหรับฉันและไม่ทำตามตัวอย่าง MDN
ดูส่วน 'คำอธิบาย' ในลิงค์ด้านบน
ฉันจะไปกับสิ่งต่อไปนี้ซึ่งได้ผลกับฉัน:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
มีความจำเป็นต้องเตรียมตัวแปรสตริงก่อนแล้วจึงแปลงเป็น RegEx
ตัวอย่างเช่น:
คุณต้องการเพิ่มminLength
และMaxLength
ใช้ตัวแปร RegEx:
function getRegEx() {
const minLength = "5"; // for exapmle: min is 5
const maxLength = "12"; // for exapmle: man is 12
var regEx = "^.{" + minLength + ","+ maxLength +"}$"; // first we make a String variable of our RegEx
regEx = new RegExp(regEx, "g"); // now we convert it to RegEx
return regEx; // In the end, we return the RegEx
}
ตอนนี้ถ้าคุณเปลี่ยนค่าของMaxLength
หรือMinLength
มันจะเปลี่ยนใน RegEx ทั้งหมด
หวังว่าจะเป็นประโยชน์ ขอโทษด้วยเกี่ยวกับภาษาอังกฤษของฉัน