【问题标题】:Replace everything before domain javascript (Google Apps Script) regex替换域 javascript(Google Apps 脚本)正则表达式之前的所有内容
【发布时间】:2016-05-14 21:16:16
【问题描述】:

假设一个子域,如何替换 URL 中域之前的所有内容和任何尾部斜杠?

示例字符串:
https://www.google.com/
http://net.tutsplus.com/about

我想要的结果(来自我的示例字符串)是:
google.com
tutsplus.com/about

目前,我使用的正则表达式是:
^https?:\/\/'

这会导致:
www.google.com/
net.tutsplus.com/about

这会替换 URL 中斜杠之前的所有内容,但我想替换第一个 . 之前的所有内容

我当前在 Apps 脚本中的代码是:

var body = DocumentApp.getActiveDocument().getBody();
body.replaceText('^https?:\/\/', '');

鉴于我使用的是 Google Apps 脚本,replaceText() 的工作方式可能存在问题。提前感谢您的帮助。

【问题讨论】:

  • 如果没有用于执行此操作的 JavaScript 库,我会感到惊讶。你调查过这个吗?
  • 尝试^https?:\/\/.*?\.匹配所有内容,包括第一个.
  • @sideroxylon 结果为:ww.google.com/
  • @CBroe 这一点都不具有建设性,也没有任何敌意的理由。我没有列出我尝试过的详尽清单,以免使问题变得混乱。我尝试了^https?:\/\/.*\.$ 和许多变体。
  • @TimBiegeleisen 一个普通的正则表达式应该能够让我到达那里。我不想将库导入 Google Apps 脚本,部分原因是它很笨重,部分原因是它不应该是必需的。

标签: javascript regex google-apps-script


【解决方案1】:

看起来 Google Doc 的正则表达式实现很弱。它不支持捕获组,因此您会遇到以下问题:

  • http://hoffmaninstitute.co.uk
  • http://google.com
  • http://docs.aws.amazon.com/

假设文本总是http://+one_sub_domain+domain+tld,你可以使用:

  var body = DocumentApp.getActiveDocument().getBody();
  body.replaceText('^https?://[0-9A-Za-z_]+\.', '');

【讨论】:

  • 谢谢。这实际上不适用于示例字符串中的链接。不过,感谢您的尝试。
【解决方案2】:

来自 Apps 脚本的 .replaceText() docs

用给定的文本模式替换所有出现的给定文本模式 替换字符串,使用正则表达式。
的一个子集 不完全支持 JavaScript 正则表达式功能,例如 作为捕获组和模式修饰符。

它只接受字符串作为参数。实现我自己的正则表达式搜索和替换是不必要的复杂,因为它需要在实际发出替换之前将每个对象类型转换为适当的 Apps 脚本对象。

我没有注意到只有当子域是 www 时才应该替换子域,因为某些不可预见的链接字符串格式需要子域可读。作为参考,这里有一组更完整的链接格式:

https://www.google.com/
https://www.google.com
https://google.com/
https://google.com
http://www.google.com/
http://www.google.com
http://google.com
https://product.google.com/about/
https://product.google.com/about
https://product.google.com/
https://product.google.com
http://product.google.com/about/
http://product.google.com/about
http://product.google.com/
http://product.google.com

虽然以下内容效率低下且冗长,但它确实有效:

function replaceLongUrls(element) {
    element = element || DocumentApp.getActiveDocument().getBody();

    element.replaceText('^https?:\/\/', '');
    element.replaceText('^www.', '');
    element.replaceText('/$', '');
};

来源:
Apps Script Documentation
Google Apps Script Regex exec() returning null
replaceText() RegEx "not followed by"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2012-12-29
    • 2017-07-16
    • 2016-12-20
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多