2012-06-03 18 views
1

所以我使用正則表達式來從字符串中獲取信息,問題是我需要在字符串中啓動並停止/JavaScript正則表達式使用一個字符兩次

下面是一個例子

var regexp = /\/(.*?)=(.*?)\//g; 
    var url_hash = "/s=lorem+ipsum/p=2/"; 
    var match; 
    var result = {}; 
    while ((match = regexp.exec(url_hash)) != null) { 
    result[match[1]] = match[2]; 
    } 

我可以抓住result['s']沒有問題,但抓住result['p']成爲問題,因爲result['s']結束/相同的起始/result['p']。如果我將字符串更改爲/s=lorem+ipsum//p=2/它完美,但當然這是可怕的。那麼,我該如何解決這個問題,以便它能夠在/處結束並啓動?我卡住了,任何幫助表示讚賞。

+0

爲什麼你不能用'/\/(.*?)=(.*? )/ g;'作爲正則表達式? – Blender

+0

我不知道,但它不會抓住'result ['p']',除非我添加額外的斜槓。繼續並測試它。 – Ian

+0

'(。*?)'不會在伊恩想要的地方結束。相反,結果['s']將包含'= lorem + ipsum/p = 2 /' –

回答

1

使用這個表達式:

/\/([^/=]+)=([^/]+)/ 

代碼:

var regexp = /\/([^/=]+)=([^/]+)/g; 
var url_hash = "/#!/s=lorem+ipsum/p=2/"; 
var match; 
var result = {}; 
while ((match = regexp.exec(url_hash)) != null) { 
    result[match[1]] = match[2]; 
    document.writeln(match[1] + ' = ' + match[2] + '<br>'); 
} 

OUTPUT:

s = lorem+ipsum 
p = 2 

Online demo of the code

+0

謝謝,正是我所尋找的解決方案。非常感謝。 – Ian

+0

不客氣,很高興它爲你解決。 – anubhava

1

爲什麼你不能只是split呢?

var result = {}; 
var url = "/#!/s=lorem+ipsum/p=2/".slice(4, -1).split('/'); 

for (i in url) { 
    var value = url[i].split('='); 
    result[value[0]] = value[1]; 
} 

console.log(result); 
1

您可以自行確定=後面的部分的預見集,而不是將其添加到正則表達式中。預見性設定是「除正斜線之外的所有事物」。

var regexp = /\/(\w+)=([^/]+)/g; 

順便說一句,我假設=之前的部分是字狀(即字母數字)

相關問題