你如何在正则表达式中使用变量?
我想在JavaScript中创建一个String.replaceAll()方法,我想使用RegEx是最简单的方法。 但是,我无法弄清楚如何将一个变量传递给RegEx。 我已经可以做到这一点,它将用“A”代替“B”的所有实例。
"ABABAB".replace(/B/g, "A");
但我想要做这样的事情:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
但显然这只会取代文本“replaceThis”...所以如何将这个变量传递给我的RegEx字符串?
不用/regex/g
语法,你可以构建一个新的RegExp对象:
var replace = "regex";
var re = new RegExp(replace,"g");
您可以通过这种方式动态创建正则表达式对象。 那么你会做:
"mystring".replace(re, "newstring");
正如Eric Wendelin所说,你可以这样做:
str1 = "pattern"
var re = new RegExp(str1, "g");
"pattern matching .".replace(re, "regex");
这产生了"regex matching ."
。 但是,如果str1是"."
,它将会失败"."
。 你会期望结果是"pattern matching regex"
,用"regex"
代替句点,但它会变成......
regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex
这是因为,尽管"."
是一个字符串,在RegExp构造函数中它仍然被解释为正则表达式,意思是任何非换行符,即字符串中的每个字符。 为此,以下功能可能会有用:
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[](){}|-])/g, "$1");
};
那你可以这样做:
str1 = "."
var re = new RegExp(RegExp.quote(str1), "g");
"pattern matching .".replace(re, "regex");
产生"pattern matching regex"
。
"ABABAB".replace(/B/g, "A");
一如既往:除非必须,否则不要使用正则表达式。 对于一个简单的字符串替换,成语是:
'ABABAB'.split('B').join('A')
那么你不必担心Gracenotes的答案中提到的引用问题。
链接地址: http://www.djcxy.com/p/2151.html上一篇: How do you use a variable in a regular expression?
下一篇: How do you access the matched groups in a JavaScript regular expression?