2014-02-23 50 views
1

我已經看到了一些關於匹配的職位/更換喜歡的路徑:正則表達式返回URL的參數數組

/login/:id/:name 

不過,我想弄清楚如何我只能返回包含數組參數的名稱; id,name

我得到了正則表達式:/:[^\s/]+/g, "([\\w-]+)"只是在比賽中掙扎。

+0

你需要正則表達式嗎? – iConnor

+0

我可以分割,循環和'substr'來檢查模式,但我希望有更清潔的東西。 – Fluidbyte

回答

1

你需要循環,因爲match不會搶捕捉組在全球正則表達式,所以你最終會遇到一些額外的字符,你並不需要:

var url = '/login/:id/:name'; 

var res = []; 
url.replace(/:(\w+)/g, function(_, match) { 
    res.push(match); 
}); 

console.log(res); //=> ["id", "name"] 

您也可以使用這個幫手:

String.prototype.gmatch = function(regex) { 
    var result = []; 
    this.replace(regex, function() { 
    var matches = [].slice.call(arguments, 1, -2); 
    result.push.apply(result, matches); 
    }); 
    return result; 
}; 

var res = url.gmatch(/:(\w+)/g); //=> ["id", "name"] 
+0

似乎工作,除非有不可變的分裂,例如:'/用戶/:id /登錄/:名稱'返回'id',但第二個值是'undefined' – Fluidbyte

+0

在這裏工作正常http:// jsbin。 com/diyig/1 /編輯 – elclanrs

+0

nvm - 這是我的目的,就像一個魅力,謝謝! – Fluidbyte