2012-03-29 164 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