2016-02-05 52 views
3

假設有一個子域,如何在域和任何結尾斜線之前替換URL中的所有內容?替換域名前的所有內容javascript(Google Apps腳本)正則表達式

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

我想(從我的例子字符串)的結果是:
google.com
tutsplus.com/about

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

導致:
www.google.com/
net.tutsplus.com/about

這將取代一切都交給在URL中的斜槓,但我想取代一切上升到第.

我Apps Script中的當前代碼是:

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

鑑於我正在使用Google Apps腳本,它可能是replaceText()如何工作的問題。先謝謝您的幫助。

+0

如果沒有這樣做的JavaScript庫,我會感到驚訝。你看過這個嗎? –

+2

嘗試使用'^ https?:\/\ /.*?\。'來匹配包括第一個「。」在內的所有內容。 – sideroxylon

+0

@sideroxylon結果是:'ww.google.com /' – SwankyLegg

回答

0

從Apps Script的.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"

1

看起來Google Doc的正則表達式實現很弱。它不支持捕獲組,所以你會遇到的問題有以下:

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

假設文本始終是的http:// + one_sub_domain + 域名 + tld,你可以使用:

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

謝謝。這實際上不適用於示例字符串中的鏈接。儘管如此,感謝您的嘗試。 – SwankyLegg

相關問題