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

正则表达式优化:匹配URL并排除含指定关键词的链接

排除含指定关键词的URL并替换其余URL的正则优化

需求是替换文本中所有URL,但排除包含"word"关键词的URL。尝试了正则(?!word)(?:https?:\/\/)?(?:[a-zA-Z0-9.]+)\.(?:[a-zA-Z]{2,3}),但无法正确排除目标URL。

测试代码

const text = `This is a sample text with links: www.example.com, https://www.hello.com, http://www.google.com, https://word.com, http://word.com
www.word.com https://www.site.frs www.word.com asasd.cds qdwdew.www asd.cdd 
sdsd https://www.word.com
https://www.word.frs some text hello word https www.example.wfd asdasd wwwsds.dsad.word.com 
`;

const regex = /(?!word)(?:https?:\/\/)?(?:[a-zA-Z0-9.]+)\.(?:[a-zA-Z]{2,3})/gm;

const matches = text.replace(regex, '[xxx]');

console.log(matches);

当前错误结果

This is a sample text with links: [xxx], [xxx], [xxx], [xxx], [xxx]
[xxx] [xxx] [xxx] [xxx] [xxx] [xxx] 
sdsd [xxx]
[xxx] some text hello word https [xxx] asdasd [xxx] 

期望结果

This is a sample text with links: [xxx], https://www.hello.com, [xxx], https://word.com, http://word.com
www.word.com [xxx] www.word.com asasd.cds qdwdew.www asd.cdd 
sdsd https://www.word.com
https://www.word.frs some text hello word https [xxx] asdasd wwwsds.dsad.word.com

解决方案

原正则的问题在于负向前瞻(?!word)的位置错误,它仅检查当前位置后是否不是"word",无法覆盖整个URL范围。需要用负向环视确保整个匹配的URL字符串中不包含"word",同时调整正则结构以匹配完整的URL片段。

修正后的正则

const regex = /\b(?!\S*word)(?:https?:\/\/)?[a-zA-Z0-9.]+\.[a-zA-Z]{2,}\b/gm;

正则解释

  • \b:单词边界,确保匹配独立的URL片段
  • (?!\S*word):负向前瞻,检查当前匹配的非空白字符序列中不包含"word"
  • (?:https?:\/\/)?:可选的HTTP/HTTPS协议头
  • [a-zA-Z0-9.]+:匹配域名主体部分
  • \.[a-zA-Z]{2,}:匹配域名后缀(支持2个以上字符,如.frs)

修改后的完整代码

const text = `This is a sample text with links: www.example.com, https://www.hello.com, http://www.google.com, https://word.com, http://word.com
www.word.com https://www.site.frs www.word.com asasd.cds qdwdew.www asd.cdd 
sdsd https://www.word.com
https://www.word.frs some text hello word https www.example.wfd asdasd wwwsds.dsad.word.com 
`;

const regex = /\b(?!\S*word)(?:https?:\/\/)?[a-zA-Z0-9.]+\.[a-zA-Z]{2,}\b/gm;

const matches = text.replace(regex, '[xxx]');

console.log(matches);

运行后即可得到符合预期的替换结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:33:27