Javascript:当字符串连接时,新的正则表达式会破坏 for 循环迭代器

问题描述 投票:0回答:1

我有一个名为脚本的对象。它包含一个名为 name 的变量,其中包含一个字符串。

还有一个数组,包含多个脚本对象,该数组称为脚本。它的大小是 5。

我有一个 for 循环,我想为与“(”连接的脚本对象的每个名称创建一个新的正则表达式:

var scriptName;
for(var i=0; i<scripts.length; i++){
    console.log("i = "+i);
    scriptName = scripts[i].name+"(";
    var newRegex = new RegExp(scriptName, 'g');
}

问题是,每当我将 script[i].name 与“(”连接时,for 循环就会停止工作。它不会增加 i,而是在 i=0 处停止。这很奇怪,因为 for 循环仍然停止而不是无限循环。

如果我更换

scriptName = scripts[i].name+"(";

scriptName = scripts[i].name;

我得到了正确的输出:

0, 1, 2, 3, 4

否则我会得到输出 0 x 5 次

javascript regex for-loop iterator string-concatenation
1个回答
1
投票

在构建

RegExp
之前,您需要转义字符串 - 像这样:

var scriptName;
for(var i=0; i<scripts.length; i++){
    console.log("i = "+i);
    scriptName = scripts[i].name+"(";
    // Escape for regex
    var escapedName = scriptName.replace(
        /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"
    );
    var newRegex = new RegExp(escapedName, 'g');
}

有趣的

/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
部分匹配正则表达式特殊字符,例如
^
+
(
)
,然后替换在它们之前添加斜杠,以便在解析字符串时忽略它们。

© www.soinside.com 2019 - 2024. All rights reserved.