【问题标题】:RegExp to match a URL正则表达式匹配一个 URL
【发布时间】:2013-01-21 09:24:43
【问题描述】:

在 Google Apps 脚本中,我尝试使用以下函数使用 RegExp 匹配 URL。

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/images/Image1.jpg?attredirects=0'";
  var regex = new RegExp('http[:a-zA-Z\.\/\-_]{0,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}

当我在 http://www.regular-expressions.info/javascriptexample.html 处将相同的正则表达式和字符串输入正则表达式测试器时,它可以工作。但是,它在 Google Apps 脚本中不起作用。

有什么想法吗?

编辑: 我认为问题出在下划线上。替换为 \w 有帮助。所以,当我用

替换正则表达式时
https[\.a-zA-Z0-9\/+:\w-]{0,100}Image1.jpg

它工作正常。

但是,它仍然不匹配下划线。例如,它不适用于以下 URL

https://sites.google.com/a/domain.com/image-store/_/rsrc/1351707816362/images/Image1.jpg

【问题讨论】:

  • 在什么情况下不起作用?
  • 如果您在 Google Apps 脚本中使用相同的代码,日志窗口会显示原始字符串并且不会将其替换为“new_url”
  • 我注意到您的正则表达式没有在字符类中指定数字范围。您的 real 输入字符串是否可能在某处包含一个数字?
  • 虽然真正的字符串包含一个数字,但不幸的是,这个也失败了。事实上,我已经放了 0-9 并没有多大帮助
  • 好吧,为什么它会匹配下划线?你没有指定一个。请参阅下面我编辑的答案。

标签: regex google-apps-script


【解决方案1】:

在斜线后添加 + 可能会这样做:

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/images/Image1.jpg?attredirects=0'";
  var regex = new RegExp('http[:a-zA-Z\.\/+\-_]{1,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}

【讨论】:

  • 另外(+David 和 +Srik),是否有必要在字符类中包含所有转义反斜杠?没有它们似乎也可以工作。
  • 你好亚当。我也不知道答案!我只是有一个幸运的预感。正如您所暗示的那样,我只是尝试不使用反斜杠,并确认它有效。魔法?
  • 大卫,谢谢。我做了更多的调试,发现问题出在下划线上。我用 \w 替换了它,我能够匹配 URL。但是,对于带有下划线的新 URL,同样的事情会失败。我将使用详细信息编辑问题
【解决方案2】:

我没有调试您的代码,但我在 repl.it 上进行了尝试,并验证它在 Chrome 的 V8 JavaScript 中也不正确。我怀疑这里有一个与 Apps 脚本无关的错误。

编辑:这可行:

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/_/rsrc/1351707816362/images/Image1.jpg'";
  var regex = new RegExp('https[\.a-zA-Z0-9\/+:\w_-]{0,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}

它与下划线不匹配,因为您没有在字符类中指定下划线。

【讨论】:

  • 谢谢,科里。我认为问题出在下划线上。我已经用更多信息对问题进行了编辑。
  • Corey,请查看使用新正则表达式和新 URL 进行的编辑,即使使用 repl.it 也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多