我正在写一些抓取用户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。我做错了吗?
答案 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)
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]);
}
您应该阅读正则表达式中的捕获组以了解其工作原理。第一组始终是完全匹配,然后是每个捕获组。