Node.js如何替换字符串中多次出现的带方括号占位符[username]?
错误原因
- 正则语法规则问题:
[]在正则中属于特殊元字符,作用是定义字符匹配集合,/[username]/gi实际的匹配逻辑是匹配u、s、e、r、n、a、m中的任意单个字符,并不会把[username]当成完整的普通字符串匹配。 - 字符串替换的默认规则问题:直接把
"[username]"或'[username]'作为replace方法的第一个参数时,JavaScript默认只会替换第一个匹配到的占位符,无法实现全局替换所有占位符的需求。
正确实现方案
方案1:正则转义特殊字符实现全局替换
把正则中的[和]用反斜杠\转义,让正则把它们识别为普通字符匹配:
let title = "Hello [username], your name is [username]. Goodbye [username]" const myuser = "Danielle" title = title.replace(/\[username\]/gi, myuser)
执行后输出结果为:Hello Danielle, your name is Danielle. Goodbye Danielle,符合预期。
方案2:使用replaceAll方法实现字符串全局替换
如果运行环境支持ES2021及以上语法(现代浏览器、Node.js 15+版本都支持),可以直接用replaceAll方法,不需要处理正则转义,写法更简单:
title = title.replaceAll("[username]", myuser)
内容的提问来源于stack exchange,提问作者Danielle
相关产品推荐
相关产品推荐

