我正在尝试用 Javascript 替换字符串中所有出现的 {0}、{1}、{2} 等。
示例字符串:
var str = "Hello, my name is {0} and I'm {1} years.";
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法来构造正则表达式:
var regex1 = new RegExp("{" + i + "}", "g")
var regex2 = new RegExp("\{" + i + "\}", "g")
Run Code Online (Sandbox Code Playgroud)
两次尝试都会引发错误:
Invalid regular expression: /{0}/: Nothing to repeat
Run Code Online (Sandbox Code Playgroud)
我使用这样的替换:
str.replace(regex, "Inserted string");
Run Code Online (Sandbox Code Playgroud)
找到了各种具有不同解决方案的 StackOverflow 帖子,但并不能完全解决我的问题。
字符串文字"\{"结果为 string "{"。如果其中需要反斜杠,则需要将其转义:
"\\{"
Run Code Online (Sandbox Code Playgroud)
这将产生 regex \{..\},这是正确的正则表达式语法。
话虽如此,你的做法实在是太奇怪了。使用正则表达式你应该做这样的事情:
var substitues = ['foo', 'bar'];
str = str.replace(/\{(\d+)\}/, function (match, num) {
return substitutes[num];
});
Run Code Online (Sandbox Code Playgroud)
换句话说,不要为每个值动态构建正则表达式;执行一个匹配所有值的正则表达式,并让您根据需要替换它们。