Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式,在带有转义字符的循环中包含变量_Javascript_Jquery_Regex - Fatal编程技术网

Javascript正则表达式,在带有转义字符的循环中包含变量

Javascript正则表达式,在带有转义字符的循环中包含变量,javascript,jquery,regex,Javascript,Jquery,Regex,我想要什么 我想循环遍历字符串数组,并用它所属的字符串替换[!0!]的每个实例。这需要将循环内的变量传递给正则表达式 我尝试过的 所有的尝试都出现并被评论。显然,我已经单独测试了这些,而不是一次全部测试 var re=''; 对于(模板i=0;模板i尝试执行: re = new RegExp('\\\[!'+templ_i+'!\\\]', 'g') 这将使您能够匹配精确的字符串[!3!]。不过,您肯定需要在字符串中使用三重反斜杠,以便匹配拾取文本[要匹配的字符串] 当您使用字符串来构建正则表

我想要什么

我想循环遍历字符串数组,并用它所属的字符串替换[!0!]的每个实例。这需要将循环内的变量传递给正则表达式

我尝试过的

所有的尝试都出现并被评论。显然,我已经单独测试了这些,而不是一次全部测试

var re='';
对于(模板i=0;模板i尝试执行:

re = new RegExp('\\\[!'+templ_i+'!\\\]', 'g')
这将使您能够匹配精确的字符串[!3!]。不过,您肯定需要在字符串中使用三重反斜杠,以便匹配拾取文本[要匹配的字符串]

当您使用字符串来构建正则表达式模式或替换时,顺便说一句,您永远不会包含正斜杠,它只在您使用正则表达式文本对象时使用。因此,您一直在尝试匹配/[!3!]/而不是其中的[!3!]项。

尝试执行以下操作:

re = new RegExp('\\\[!'+templ_i+'!\\\]', 'g')
这将使您能够匹配精确的字符串[!3!]。不过,您肯定需要在字符串中使用三重反斜杠,以便匹配拾取文本[要匹配的字符串]


当您使用字符串来构建正则表达式模式或替换时,顺便说一句,您永远不会包含正斜杠,它只在您使用正则表达式文本对象时使用。因此,您一直在尝试匹配/[!3!]/而不是[!3!]在许多情况下。

在这种情况下,我要做的是找到所有模式位置并替换它们,而不是迭代可能的数据

var svg_template = "some [!0!] text [!1!] with patterns [!foo!]";
var data = {0: {text: "a"}, 1: {text: "b"}, foo: {text: "c"}};
var result = svg_template.replace(/\[!(\w+)!\]/g, function (match, id) {
   return data[id].text;
});
console.log(result);
//> "some a text b with patterns c"

在这种情况下,我要做的是找到所有模式位置并替换它们,而不是迭代可能的数据

var svg_template = "some [!0!] text [!1!] with patterns [!foo!]";
var data = {0: {text: "a"}, 1: {text: "b"}, foo: {text: "c"}};
var result = svg_template.replace(/\[!(\w+)!\]/g, function (match, id) {
   return data[id].text;
});
console.log(result);
//> "some a text b with patterns c"


可能
re=newregex(“\[!”+temp\u i+“!\]”)
会有帮助我也试过了,会更新问题。你确定第三个选项不起作用吗?我觉得没问题。如果你传入一个要替换的字符串,它会将其视为一个字符串,如果你传入一个RegExp对象,它会使用该模式进行匹配,所以大多数选项不起作用的原因是因为他在st中有正斜杠环匹配,这是您不希望的,因为它将尝试匹配它。可能
re=new Regex(“\[!”+temp\u i+“!\]”)
会有帮助我也试过了,会更新问题。你确定第三个选项不起作用吗?我觉得没问题。如果你传入一个要替换的字符串,它会将其视为一个字符串,如果你传入一个RegExp对象,它会使用该模式进行匹配,所以大多数选项不起作用的原因是因为他在st中有正斜杠环匹配,你不想要,因为它会尝试匹配。我尝试过使用新的RegExp,但没有使用带有三个反斜杠的新RegExp。这总是你不想尝试的一件事。这似乎是可行的。如果它检查出来,我很乐意将其标记为正确的。一个斜杠不起作用的原因是因为RegExp从当你使用一个反斜杠时,所有的意思都是使用文字字符[但是你需要在字符串中同时使用文字字符\和[来生成正确的模式。我认为它应该是
new RegExp(“\\\[!”+temp_I+“!\\\\]”,'g')
(注意“g”参数),来替换所有“[!0!]”,“[!1!]'等。这取决于每个字符串中是否有多个匹配项,但如果字符串中有多个匹配项,则肯定应该包含gflag@Goose在我下面回答的评论中提到,可能有“数百[!0!]“。我确实尝试过使用新的RegExp,但没有使用带有三个反斜杠的新RegExp。这总是一件你不想尝试的事情。这似乎是有效的。如果它被验证,我会很高兴地将其标记为正确的。一个斜杠不起作用的原因是因为RegExp从字符串构建模式。当你使用一个反斜杠时,所有的意思都是使用文本字符[但您需要在字符串中同时使用文本字符\和[来生成正确的模式。我认为应该是
new RegExp('\\\[!'+temp\\\+'!\\\]','g')
(注意'g'参数),以替换所有'[!0!]','[!1!]'等。这取决于每个字符串中是否有多个匹配项,但如果字符串中有多个匹配项,则肯定应该包含gflag@Goose在我下面回答的评论中提到,可能有“数百个[!0!]”。如果我有数百个[!0!]”,该怎么办替换?那么是的,我选择了@WakeskaterX的答案,但使用了固定的Regexp.:)如果我有数百个[!0!]要替换怎么办?那么是的,我选择了@WakeskaterX的答案,但使用了固定的Regexp.:)