Javascript正则表达式和非捕获括号

jul*_*n_c 4 javascript regex

我的正则表达式和Javascript上有点生疏.我有以下字符串var:

var subject = "/admin.php?page=settings&tabs_added[114787535263592]=1&tabs_added[217770811582323]=1&tabs_added[198738186831542]=1"
Run Code Online (Sandbox Code Playgroud)

我想提取114787535263592,217770811582323198738186831542.

我试过使用非捕获括号(?:):

var regexp = /(?:tabs_added[\[])(\d)+(?:[\]])/;
var pageid = regexp.exec(subject);
Run Code Online (Sandbox Code Playgroud)

但是我得到的结果(["tabs_added[114787535263592]", "2"])不是我的预期 - 我做错了什么?这是一个jsFiddle:http://jsfiddle.net/KgpAw/

Pau*_*aul 5

你非常接近.你也需要抓住它+.否则你只捕获一个十进制数字:

var regexp = /(?:tabs_added[\[])(\
Run Code Online (Sandbox Code Playgroud)

你还应该使你的正则表达式全局找到所有匹配:

var regexp = /(?:tabs_added[\[])(\d+)(?:[\]])/g;
Run Code Online (Sandbox Code Playgroud)

然后,你应该通过成果循环,你也不需要有非捕获组,因为你不使用他们量词(?,+,或*),也不需要把你[]一个字符类中:

var regexp = /tabs_added\[(\d+)\]/g;
var result;
while(null != (result = regexp.exec(subject))){
    document.write(result[1] + '<br />');
} 
Run Code Online (Sandbox Code Playgroud)

JSFiddle示例

注意:最好console.log用于调试目的,而不是document.write只要有可用的控制台.(Chrome,Opera,IE9和Firefox都内置了控制台,我认为Safari也是如此,所以你应该有一个可用的.)console.log在记录对象和数组时提供了更有价值的信息.