2012-07-10 211 views
0

編輯:我可能應該提到這是用於Backbone.js路由。拆分它不是一個選項。正則表達式 - 匹配

爲以下字符串:

!/example/c/0/0/0/0 

我想使用「匹配()」提取斜槓之間的值。我的問題是最後一項(「/ 0」)可能並不總是在字符串中。這就是我目前有:

'!/example/c/0/0/0/0'.match(/^!(\/[A-z0-9\-_]+|)\/c\/([0-9]+)\/([0-9]+)\/([0-9]+/) 

此方法返回 '示例' 的陣列, '0', '0', '0',如果例如存在並且 '', '0', '0', 「0」例如,如果不存在......所以,最後的結果,我想看到的是:

'example', '0', '0', '0', '' 

當最後一個項目不存在,或者:

'example', '0', '0', '0', '0' 

當存在。所以基本上它是最後一個項目之前的斜線!任何幫助將不勝感激。

+3

你爲什麼要用正則表達式來做這件事?你知道你的分隔符是什麼,所以'拆分'字符串並完成它。 – 2012-07-10 15:13:12

+0

添加了更多信息...我無法拆分它,因爲它是Backbone.js路線 – mike 2012-07-10 15:29:08

+1

我不明白「Backbone route」和「can not use split」之間的關係。「你能用更多的代碼來說明發生了什麼嗎? – 2012-07-10 16:48:33

回答

3

因爲你知道你的分隔符,所以更容易分裂!

var toSplit = "!/example/c/0/0/0/0"; 
var splitted = toSplit.split('/'); 
+0

我應該已經更清楚了......這是一條Backbone.js路線。所以我無法分割它。 – mike 2012-07-10 15:27:37

1

.split()功能可能就足夠了什麼你正在嘗試做的,但你正在尋找的正則表達式如下:

/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/ 

'!/example/c/0/0/0/'.match(/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/) 
["!/example/c/0/0/0/", "example", "0", "0", "0", ""] 

'!/example/c/0/0/0/0'.match(/^!\/([A-z0-9\-_]+)\/c\/(\d+)\/(\d+)\/(\d+)\/(\d*)/) 
["!/example/c/0/0/0/0", "example", "0", "0", "0", "0"] 

\d[0-9]一個快捷方式,*意味着重複0次或更多次,而+意味着重複1次或更多次。

1

你,如果你不需要對值了嚴格的把關,你可以有這樣的事情:

"!/example/c/0/0/0/0".match(/^!\/([^/]+)\/c\/([^/]+)\/([^/]+)\/([^/]+)\/([^/]*)/); 

請記住,你有就我所知有確切的沒辦法只用於尋找的數組match:數組的第一個元素是整個匹配的字符串,而不是「示例」。