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

Javascript: String.match() - pass string variable in regular expression

本文关键字:正则表达式 变量 字符串 String match Javascript      更新时间:2023-09-26

我试图重写该方法(w3schools教程的一部分)。

问题是使变量字符串成为正则表达式的一部分。

教程示例代码:

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);
}

我尝试的方法没有奏效。

使用regex构造函数,如:

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);
}

如果要将变量的值作为正则表达式传递,则需要使用RegExp构造函数。

var test = "ain";
var re = new RegExp(test, "gi");

如果您的变量包含特殊字符,最好对这些字符进行转义。

var re = new RegExp(test.replace(/('W)/g, "''$1"), "gi");

请注意,您将一个字符串传递给match。如果我们遵循文档,这将执行new RegExp(test)。因此,您应该避免使用//gi字符串,并向RegExp构造函数添加相应的标志:默认构造函数既不添加全局搜索(g),也不添加不区分大小写的搜索(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" ]

注:

表单str.match(test, "gi");仅适用于Firefox浏览器,但已被弃用,并从Firefox 39发出控制台警告(请参阅RGraham注释)。

是的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);

您本可以搜索"动态正则表达式",您会发现:Javascript Regexp从变量动态生成?或者在JavaScript中使用动态(变量)字符串作为正则表达式模式,这两种模式都很好地描述了它。