如何在JavaScript中去除$...$内的首尾空格?
JavaScript replace方法中$符号的转义问题
核心问题在于JavaScript的String.replace()方法里,替换字符串中的$是特殊字符,规则如下:
$n(n为数字)表示引用正则表达式中第n个捕获组的内容$$表示转义为一个普通的$符号
第一个代码失效的原因
你的第一行代码:
"$ 1234 $".replace(/\$ *(.+?) *\$/, "$$1$")
替换字符串$$1$会被解析成:
$$→ 转义为普通的$1→ 普通字符(因为前面的$$已经是完整的转义序列,后续的1无法和$组成$1捕获组引用)$→ 普通字符(后面没有数字,不构成捕获组引用)
最终拼接结果就是$1$,和预期不符。
第二个代码生效的原因
第二行代码:
"$ 1234 $".replace(/\$ *(.+?) *\$/, "$ $1$")
替换字符串$ $1$的解析逻辑是:
$→ 第一个$后面跟空格,不构成特殊序列,直接作为普通$和空格保留$1→ 引用正则中的第一个捕获组(即1234)$→ 普通字符(后面无数字,不触发特殊解析)
所以最终得到$ 1234$,符合预期。
正确实现预期结果的写法
如果想要得到$1234$,需要把开头和结尾的$都用$$转义,同时正确引用捕获组$1,替换字符串应该写成$$$1$$:
"$ 1234 $".replace(/\$ *(.+?) *\$/, "$$$1$$") // 返回 "$1234$"
或者也可以使用replace的函数回调写法,彻底避免转义混淆:
"$ 1234 $".replace(/\$ *(.+?) *\$/, (match, group1) => `$${group1}$`) // 返回 "$1234$"
内容的提问来源于stack exchange,提问作者Ziyuan
相关产品推荐
相关产品推荐

