下面的代码给出了错误:
var a = "hello {0} world";
a.replace(/{0}/g, "little");
但这个有效:
var a = "hello {str} world";
a.replace(/{str}/g, "little");
为什么会出现此错误?
因为{n}
(其中n
是正整数(是量词语法,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Quantifiers
你不希望花括号在这里有它们的"特殊含义",但希望它们被视为普通字符——所以你应该转义它们。
a.replace(/{0}/g,"little")
replace()
的参数是一个正则表达式。
特别地,大括号{
和}
是正则表达式元字符(它们是范围量词(。
必须对正则表达式中的大括号进行转义(使用(才能使其工作。
例如:
a.replace(/{0}/g, "little");
会起作用。这将从字面上治疗牙套。
您得到的特定错误消息:
SyntaxError:无效的正则表达式:/{0}/:没有可重复的
是因为引擎希望在量词之前有一些文本,因此例如,x{0}
作为正则表达式将是一个有效的参数。
在另一种情况下,使用
a.replace(/{str}/g, "little");
确实有效,因为大括号失去了作为元字符的特殊含义,而被字面处理。范围限定符必须采用{n}
、{n,}
或{n,m}
的形式,其中n
和m
是整数。
问题
大括号内的数字有一个特殊的含义,它是一种限定语法。
解决方案
您必须使用{ }
来转义大括号
下面是一个例子
var b = "hello {0} world";
console.log(b.replace(/{0}/g,"little"));