regex.match返回正则表达式以及结果?

时间:2011-04-21 14:28:51

标签: javascript regex

我正在写一些抓取用户ID的javascript。它有效,但问题是结果中包含了实际的正则表达式。

我的代码:

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。我做错了吗?

3 个答案:

答案 0 :(得分: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 = ...”,因此具有相同的效果。

答案 1 :(得分:0)

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

这样做:

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

matches[0]将是整个匹配,但matches[1,2,3 ... n]将是括号中捕获的部分。

答案 2 :(得分: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]);
}

您应该阅读正则表达式中的捕获组以了解其工作原理。第一组始终是完全匹配,然后是每个捕获组。