我尝试重写该方法(w3schools上tutorial的一部分)。
问题是使变量字符串成为正则表达式的一部分。
教程示例代码:
function myFunction() {
var str = "The rain in SPAIN stays mainly in the plain";
var res = str.match(/ain/gi);
console.log(res)
}
我试过了:
function myFunction() {
var str = "The rain in SPAIN stays mainly in the plain";
var test = "ain";
var re = "/"+test+"/gi";
var res = str.match(re);
console.log(res);
}
我尝试的方式不起作用。
答案 0 :(得分:13)
使用正则表达式构造函数,如:
function myFunction() {
var str = "The rain in SPAIN stays mainly in the plain",
test = "ain",
re = new RegExp(test, 'gi'),
res = str.match(re);
console.log(res);
}
答案 1 :(得分:8)
如果要将变量值作为正则表达式传递,则需要使用RegExp
构造函数。
var test = "ain";
var re = new RegExp(test, "gi");
如果你的变量包含特殊字符,最好逃避它们。
var re = new RegExp(test.replace(/(\W)/g, "\\$1"), "gi");
答案 2 :(得分:5)
是match()
不适用于字符串文字
您可以使用var re = new RegExp(test,"gi");
var str = "The rain in SPAIN stays mainly in the plain";
var test = "ain";
var re = new RegExp(test,"gi");
var res = str.match(re);
console.log(res);
答案 3 :(得分:5)
您可以搜索“动态正则表达式”,您会发现: Javascript Regexp dynamic generation from variables? 或Use dynamic (variable) string as regex pattern in JavaScript两者都很好地描述了它。
答案 4 :(得分:5)
请注意,您将字符串传递给match
。如果我们按照documentation进行操作,则会执行new RegExp(test)
。因此,您应该避免使用/
和/gi
字符串并将相应的标志添加到RegExp构造函数中:默认构造函数既不添加全局搜索(g
)也不添加不区分大小写的搜索({{1 }})。
解决问题的方法:
i
这将返回:
var str = "The rain in SPAIN stays mainly in the plain";
var test = "ain";
var res = str.match(new RegExp(test, "gi"));
注意:
表单Array [ "ain", "AIN", "ain", "ain" ]
仅适用于Firefox浏览器,但不推荐使用,并从Firefox 39中抛出控制台警告(请参阅RGraham评论)。