在Javascript中没有什么可以重复使用regexp

时间:2015-08-20 09:59:24

标签: javascript regex

我正在尝试用Javascript替换字符串中所有出现的{0},{1},{2}等。

示例字符串:

var str = "Hello, my name is {0} and I'm {1} years.";

我尝试了以下方法来构建正则表达式:

var regex1 = new RegExp("{" + i + "}", "g")
var regex2 = new RegExp("\{" + i + "\}", "g")

两次尝试都会抛出错误:

Invalid regular expression: /{0}/: Nothing to repeat

我像这样使用替换:

str.replace(regex, "Inserted string");

找到了各种具有不同解决方案的StackOverflow帖子,但并不能解决我的问题。

1 个答案:

答案 0 :(得分:1)

字符串文字"\{"会生成字符串"{"。如果你需要反斜杠,你需要逃避它:

"\\{"

这将产生正则表达式\{..\},这是正确的正则表达式语法。

话虽如此,你的方法不仅仅是奇怪的。使用正则表达式,你应该做这样的事情:

var substitues = ['foo', 'bar'];
str = str.replace(/\{(\d+)\}/, function (match, num) {
    return substitutes[num];
});

换句话说,不要为每个值动态构造一个正则表达式;做一个匹配所有值的正则表达式,让你根据需要替换它们。