You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将字符串中指定数组内的所有URL替换为***

问题诊断

你的实现逻辑存在多处错误:

  • 直接报错的原因是:JavaScript 字符串原型上没有原生的replaceAt方法,调用不存在的方法自然会抛出异常。
  • 额外的逻辑缺陷:
    • map是用来生成新数组的遍历方法,不适合做字符串批量修改操作;且你每次操作的都是原始message,没有保存替换后的新字符串,就算replaceAt方法存在,最终也只能生效最后一个URL的替换。
    • indexOf只能找到单个URL第一次出现的位置,如果同一个URL在字符串中多次出现会出现漏替换的情况。

正确实现方案

方案1:遍历URL逐次全局替换(易理解)

let message = "hello https://ggogle.com parul https://yahoo.com and http://web.com";
let url = ["https://ggogle.com", "https://yahoo.com", "http://web.com"];

url.forEach(item => {
  // 转义URL中的正则特殊字符,避免匹配异常
  const escapeReg = item.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  // 全局匹配当前URL并替换
  message = message.replace(new RegExp(escapeReg, 'g'), '***');
})

console.log(message);
// 输出结果:hello *** parul *** and ***

方案2:单次正则匹配替换(性能更高)

把所有URL拼接成单个正则表达式,只做一次替换操作,适合URL数量较多的场景:

let message = "hello https://ggogle.com parul https://yahoo.com and http://web.com";
let url = ["https://ggogle.com", "https://yahoo.com", "http://web.com"];

// 所有URL转义后拼接成正则多选分支
const allUrlReg = new RegExp(
  url.map(item => item.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'),
  'g'
);
const result = message.replace(allUrlReg, '***');

console.log(result);
// 输出结果:hello *** parul *** and ***

内容的提问来源于stack exchange,提问作者Rockstar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:57:05