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

Moh*_*itt 10 javascript string

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

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

教程示例代码:

function myFunction() {
    var str = "The rain in SPAIN stays mainly in the plain"; 
    var res = str.match(/ain/gi);
    console.log(res)
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

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);
}
Run Code Online (Sandbox Code Playgroud)

我尝试的方式不起作用.

CD.*_*D.. 14

使用正则表达式构造函数,如:

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);
}
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 8

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

var test = "ain";
var re = new RegExp(test, "gi");
Run Code Online (Sandbox Code Playgroud)

如果你的变量包含特殊字符,那么最好逃避它们.

var re = new RegExp(test.replace(/(\W)/g, "\\$1"), "gi");
Run Code Online (Sandbox Code Playgroud)


squ*_*oid 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);
Run Code Online (Sandbox Code Playgroud)


eX0*_*du5 5

你可以搜索"动态正则表达式",你会发现: Javascript Regexp动态生成变量? 或者使用动态(变量)字符串作为JavaScript中的正则表达式模式,它们都很好地描述了它.

  • 这真的应该是评论,而不是答案.或者也许这个问题应该标记为一个链接答案的副本? (2认同)

Tra*_*pII 5

请注意,您将字符串传递给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"));
Run Code Online (Sandbox Code Playgroud)

这将返回:

Array [ "ain", "AIN", "ain", "ain" ]
Run Code Online (Sandbox Code Playgroud)

注意 :

该表单str.match(test, "gi");仅适用于Firefox浏览器,但已弃用,并从Firefox 39中引发控制台警告(请参阅RGraham评论).