2012-08-08 80 views
1

我正在處理一個URL到我的獨立腳本中的組成部分上。使用Google應用腳本解析URL

我的問題是網上的正則表達式構建工具告訴我,我的正則表達式是正確的,但我只有一個值。

具體而言,我的代碼是:

function UrlComponents(url) { 
    const _urlMatchPattern = /^((http[s]?):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$/mig; // Source: http://stackoverflow.com/questions/27745/getting-parts-of-a-url-regex 

    if (!_urlMatchPattern.test(url)) 
    return new Array(); 

    var urlMatches = url.match(_urlMatchPattern); 

    if (urlMatches != null) 
    { 
    Logger.log("Count:" + Math.floor(urlMatches.length)); 

    for (var i=0; i<Math.floor(urlMatches.length);i++) 
     Logger.log("Position " + i + ": " + urlMatches[i]); 
    } 

    return urlMatches; 
} 

當我測試此通過運行代碼中,輸出是包含填充字符串的單個數組元素。但是,通過正則表達式測試工具(例如http://gskinner.com/RegExr/或www.regexplanet.com/advanced/java/)也可以提供正確的信息。

任何幫助/建議/良好禮貌指出我不可避免的愚蠢的錯誤是受到歡迎。

與感謝,強尼

回答

1

要解決,你必須從你的正則表達式消除/g修改的問題,即該行應是

const _urlMatchPattern = /^((http[s]?):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?$/mi; 
+0

非常感謝,megabyte1024。奇蹟般有效。我曾相信我已經測試了這一切的每一個組合。 – 2012-08-10 13:07:16

+0

@Jonny Mak如果我想從網頁中提取所有鏈接而不破壞網址到其部分代碼,我應該使用哪部分代碼? – user1788736 2015-10-21 23:56:30