2017-04-24 76 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

相關問題