2011-04-21 40 views
0

我正在写一些抓取用户ID的javascript。它的工作原理,但问题是实际的正则表达式正在被包含在结果中。regex.match返回正则表达式以及结果?

我的代码是:

var regex = /profile\.php\?id=(\d*)/g; 
var matches = source.match(regex); 

,并返回:

profile.php?id=1111,1111,profile.php?id=2222,2222,profile.php?id=33333,33333, 

我要的是用户的ID。难道我做错了什么?

+1

对于像这样的正则表达式问题,显示一些示例输入,正在使用的正则表达式(以及如何使用它),您期望得到的以及您实际得到的是什么是非常有帮助的。有了这些信息,帮助你弄清楚发生了什么更容易。 – cdeszaq 2011-04-21 14:31:48

+0

这确实是一个简单的正则表达式问题。一切正常,这不是问题。问题是为什么实际的正则表达式与matches数组中的用户ID一起返回。 – 2011-04-21 14:34:00

+0

我只是想帮助。由于我无法根据你立即给出的例子确切地确定问题的根源,我认为其他人也会有点失落。一般来说,“Action”,“Expected”和“Observed”模式是我发现最有用的解释一段代码的问题。 – cdeszaq 2011-04-21 14:40:06

回答

0

带g标志的string.match只返回匹配完整正则表达式的字符串。你想被捕获组是什么,你需要使用RegExp.exec

事情是这样的:

var text="lots of stuff with something in here a few times so that something comes back multiple times when searching for something."; 

var regex=new RegExp("some(thing)","g"); 

var result=null; 

while(result=regex.exec(text)){ 
    document.write(result[1]); 
} 

您应该捕获组在正则表达式来理解为什么这个作品阅读起来。第一组总是按顺序与每个捕获组完全匹配。

0

这做的jsfiddle你需要什么:

http://jsfiddle.net/city41/pm3rR/

这里是它的代码:

var source = "profile.php?id=1111,1111,profile.php?id=2222,2222,profile.php?id=33333,33333,"; 
var regex = /profile\.php\?id=(\d*)/g; 
var matches = regex.exec(source); 

alert(matches[0]); 
alert(matches[1]); 
alert(regex.lastIndex); 

matches = regex.exec(source); 

alert(matches[0]); 
alert(matches[1]); 
alert(regex.lastIndex); 

当你执行regex.exec(...),internall它会将其lastIndex财产到最后一场比赛的最后一个索引。所以如果你再次执行正则表达式,它会从最后一次停止的地方开始。

显然我的源字符串与你的不一样,但它包含多个“id = ...”,所以具有相同的效果。

0

.match()方法不只是返回括号中的内容。它返回整个匹配模式

做这样的:

var regex = /profile\.php\?id=(\d*)/g; 
var matches = regex.exec(source); 

matches[0]将是整场比赛,但matches[1,2,3 ... n]将从括号中的截取部分。

+0

有没有其他方法可以使用?还是有一个传统的解决方案来解决我的问题?我正在用Javascript编码器猜测它的一个常见问题。 – 2011-04-21 14:36:26

+0

更新了代码来做你需要的东西 – Cfreak 2011-04-21 14:40:45

+0

我试过了,但它似乎只返回一个匹配。 – 2011-04-21 14:45:51

相关问题