【问题标题】:Nothing to repeat with regexp in Javascript [duplicate]Javascript中的正则表达式无需重复[重复]
【发布时间】:2015-08-20 09:59:23
【问题描述】:

我正在尝试用 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 帖子,但并不能完全解决我的情况。

【问题讨论】:

标签: javascript regex


【解决方案1】:

字符串文字"\{" 产生字符串"{"。如果你需要一个反斜杠,你需要转义它:

"\\{"

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

话虽如此,但您的方法非常奇怪。使用正则表达式你应该这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2020-08-23
    • 2011-04-10
    • 1970-01-01
    • 2014-03-19
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多