首页 > 解决方案 > 如何从正则表达式替换中省略特定字符串?

问题描述

我需要遍历网址并删除域扩展名,除非网址与特定内容匹配。那时我想完全忽略那场比赛。我在 Google Apps Script 中执行此操作,因此它可能缺少一些较新的 Javascript 功能。

我从工作正常的基础开始。

source.replace(/(\.\S+\b)/gi,"")

现在,如果整个字符串是:cars.com,我想忽略扩展名。

[abc.com, yahoo.com, amazon.com, cars.com]
becomes
[abc, yahoo, amazon, cars.com]

我的前瞻/后视经验很少,这就是我的问题所在。以下尝试仍会从“cars.com”中删除扩展名。

source.replace(/(?<!cars\S+)(\.\S+\b)/gi,"")

我很确定我明白为什么,我只是不知道如何解决它。

标签: javascriptregexgoogle-apps-script

解决方案


如果您有很多要忽略的 url,您的正则表达式可能会变得非常长,您可以有一个要忽略的 url 数组,映射 urls 数组并且仅在不忽略 url 时应用正则表达式:

const urls = ["abc.com", "yahoo.com", "amazon.com", "cars.com"];
const ignore = ["cars.com", "other.com"];

const result = urls.map(url => {
  return ignore.includes(url) ? url : url.replace(/(\.\S+\b)/gi, "");
});

console.log(result);


推荐阅读