Javascript:String.match() - 在正则表达式中传递字符串变量

时间:2015-06-25 06:43:40

标签: javascript string

我尝试重写该方法(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);
}

我尝试的方式不起作用。

5 个答案:

答案 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评论)。