2012-03-29 161 views
0

我有一個字符串,其格式如下(3,1,Mayer,Jack)。我需要所有4個元素作爲自己的變量。我想過使用JavaScript的比賽() - 函數來做到這一點,但我不知道我能得到變量的4個元素...JavaScript匹配函數 - 返回找到的元素數組?

我這個代碼試了一下:

var clickedId = '(3,1,Mayer,Jack)'; 
var pregId = clickedId.match(/([\d]+,[\d]+,[\w]+,[\w]+)/g); 
alert(pregId[0]); 

但我得到一個彈出窗口「(3,1,梅耶,傑克)」...我想過這樣的事情:

var id = pregId[0]; 
var teamid = pregId[1]; 
var surname = pregId[2]; 
var name = pregId[3]; 

我該怎麼做?

謝謝!

+1

只要在意與「(」你正在使用。你正在創建一個組,不匹配parentesis。如果你的意圖是匹配parentesis,你需要將它轉義出來:「\\(」。 – alextercete 2012-03-29 18:21:09

回答

2

match函數匹配整個表達式,而不是拉出整個部分。所以你需要匹配每個單獨的元素,比如用(\d|\w)+這樣的正則表達式。這裏有一個例子:

var clickedId = '(3,1,Mayer,Jack)'; 
var pregId = clickedId.match(/((\d|\w)+)/g); 

var id = pregId[0]; 
var teamid = pregId[1]; 
var surname = pregId[2]; 
var name = pregId[3]; 

alert(surname); 

演示:http://jsfiddle.net/Znu7N/

+0

其實,它看起來可能會拉動整體的一部分。看看這裏:http:// stackoverflow .com/questions/1570066/javascript-regex-how-to-split-regex-sub-expression-matches-in-to-dimensional-dimension – mellamokb 2012-03-29 18:20:01

+0

謝謝。Works works! – Torben 2012-03-29 18:29:26

0

使用在你的正則表達式的各個組:

clickedId.match(/([\d]+),([\d]+),([\w]+),([\w]+)/g); 

那麼剩下應該工作

而不是你把一切都放到同一個組製作整個表達式匹配爲單個字符串

+0

'match'在Javascript中不能這樣工作。結果爲你所建議的將是'[「3,1,Mayer,Jack」]' – alextercete 2012-03-29 18:29:32

+1

你是對的,正確的方法是使用RegEx.exec – Guard 2012-03-29 18:32:26

+1

只是爲了清除掉'/([\ d] +),([\ d] +),([\ w] +),([\ w] +)/ g.exec('(3,1,Mayer,Jack)')''會返回'[「3 ,1,Mayer,Jack「,」3「,」1「,」Mayer「,」Jack「]'。 – alextercete 2012-03-29 18:54:29