2013-01-21 44 views
1

我有一個正則表達式可以捕獲三個反向引用,儘管一個(第二個)反向引用可能是null正則表達式有3個反向引用,但有一個可選

鑑於流動字符串:

http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajonathonoat.es&source=web&cd=1&ved=0CC8QFjAA&url=http%3A%2F%2Fjonathonoat.es%2Fbritish-mozcast%2F&ei=MQj9UKejDYeS0QWruIHgDA&usg=AFQjCNHy1cDoWlIAwyj76wjiM6f2Rpd74w&bvm=bv.41248874,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1 

我要拍攝的TLD(在這種情況下.co.uk),q PARAM和cd PARAM。

我用正則表達式如下:

/.*\.google([a-z\.]*).*q=(.*[^&])?.*cd=(\d*).*/i 

不同的是二次反向引用包括其他參數高達的cd PARAM其中一期工程,目前我得到這個:

["http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajo…,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1 ", ".co.uk", "site%3Ajonathonoat.es&source=web", "1", index: 0, input: "http://www.google.co.uk/url?sa=t&rct=j&q=site%3Ajo…,d.d2k,.co.uk,site%3Ajonathonoat.es&source=web,1"] 

第1反向引用是正確的,它是.co.uk,所以是第三;它是1。我想第二次反向引用是null(或undefined或其他)或者只是q param,在這個例子中是site%3Ajonathonoat.es。它目前還包含source參數(site%3Ajonathonoat.es&source=web)。

任何幫助將不勝感激,謝謝!

我已添加JSFiddle of the code, look in your browser console for the output,謝謝!

+0

我也想考慮解析網址:http://stackoverflow.com/questions/736513/how-do-i-parse-a-url-into -HostName和路徑,在JavaScript的 – Kobi

回答

0

你想中間組是:

q=([^&]*) 

這將捕獲比其他符號的字符。這也允許零個字符,因此您可以刪除可選組(?)。

工作例如:http://rubular.com/r/AJkXxgeX5K

1

如果否定字符類,我總是事半功倍添加到類本身:我也recoomend不使用

/.*\.google([a-z\.]*).*q=([^&]*?)?.*cd=(\d*).*/i 

*或+,因爲他們是「貪婪」,總是使用 *?或+?當你要在字符串中找到分隔符時。欲瞭解更多有關貪婪檢查JFFriedls掌握Rgeular表達式或只是here

相關問題