JS replace()函数中如何在回调内复用正则匹配到的值?
实现方案
JS 内置的 String.replace() 方法原生支持自定义替换逻辑,完全可以满足你的需求:
- 正则匹配到内容后,会自动把匹配结果传入你指定的回调函数
- 回调函数的返回值就是最终替换到原文本的内容
- 处理非字符串类型输入时,先用
String()统一转成字符串即可,避免调用方法报错
修正后的可运行代码
const regex = /123/g let text = "XYZ string is some string is a string, but 123 is what I want to change." // 注意:第二个参数直接传函数引用即可,不需要加括号手动调用 let edit = String(text).replace(regex, numGen) console.log(edit) // 输出:XYZ string is some string is a string, but ***1234*** is what I want to change. function numGen(match) { // match参数就是正则匹配到的内容,这里就是"123" // 按需求拼接后返回即可 return `***${match}4***` }
补充说明
如果你的正则带有捕获分组,回调函数会按顺序接收更多参数:第一个参数是完整匹配结果,第二个及之后的参数依次对应每个分组的捕获内容,倒数第二个参数是匹配结果在原字符串的下标,最后一个参数是原字符串。
你之前遇到matchAll()返回RegExpStringIterator类型是正常表现,该方法本身就是返回迭代器,需要自行遍历才能拿到所有匹配结果,你的替换场景直接用replace()的回调逻辑更简洁,不需要额外处理迭代器,性能也更高,适合浏览器扩展批量处理页面内容的场景。
内容的提问来源于stack exchange,提问作者SubZero
相关产品推荐
相关产品推荐

