2017-04-24 40 views
1

休息我测试过此正则表达式从文本字符串中提取URL:正则表达式测试,在JavaScript工作,但在谷歌工作表的REGEXEXTRACT

(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$]) 

...和它的作品只是因为我想,它匹配我所投的所有网址。

然而,当我使用REGEXEXTRACT在谷歌表是这样的:

=iferror(Regexextract(A1,"(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])"),"") 

...什么都没有提取。正则表达式是相同的。

我在做什么错?

注意:正则表达式在这里进行测试:http://www.regextester.com/53716

+2

谷歌表[documenation] (https://support.google.com/docs/answer/3098245?hl=zh-CN)陈述: *** Google产品使用[RE2](https://github.com/google/re2/blob/master/doc/syntax.txt)提供正则表达式。 [了解如何使用RE2表达式](https://github.com/google/re2/blob/master/doc/syntax.txt)。*** –

+0

我至少会用'[[因为'-'在角色类中具有特殊含义,所以最好避免在角色类中使用短划线。除非在字符类的末尾(在大多数正则表达式引擎中) – LukStorms

+1

@LukStorms'-'如果放置在字符集的开始或结尾处,则没有特殊含义。 '[-abc]'或'[abc-]'是完全有效的。 –

回答

1

我建议你使用像

=REGEXEXTRACT(B6, "(?:(?:https?|ftps?|file)://|www\.|ftp\.)\S+") 

详细一个简单的正则表达式:

  • (?:(?:https?|ftps?|file)://|www\.) - 无论是在:
    • (?:https?|ftps?|file):// - http/httpsftp/ftpsfile随后用://
    • | - 或
    • www\. - www.
  • \S+ - 1或多个非空白符号

enter image description here

+0

非常好!有几个例外,你的正则表达式没有捕获,但它仍然节省了我的工作时间。非常感谢你 :) – user871213

相关问题