正则表达式非捕获javascript中的组

Ben*_*hen 8 javascript regex

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

var subject = "javascript:loadNewsItemWithIndex(5, null);";
Run Code Online (Sandbox Code Playgroud)

我想5使用正则表达式提取.这是我的正则表达式:

/(?:loadNewsItemWithIndex\()[0-9]+/)
Run Code Online (Sandbox Code Playgroud)

应用如下:

subject.match(/(?:loadNewsItemWithIndex\()[0-9]+/)
Run Code Online (Sandbox Code Playgroud)

结果是:

loadNewsItemWithIndex(5
Run Code Online (Sandbox Code Playgroud)

什么是最简洁,最可读的提取方式5?是否可以通过loadNewsItemWithIndex(从匹配中排除而不是匹配5作为子组来完成此操作?

mel*_*okb 8

返回值String.match是一个匹配数组,因此您可以在数字部分周围放置括号,然后只检索该特定匹配索引(其中第一个匹配是整个匹配结果,后续条目是每个捕获组):

var subject = "javascript:loadNewsItemWithIndex(5, null);";
var result = subject.match(/loadNewsItemWithIndex\(([0-9]+)/);
                                    //             ^      ^  added parens
document.writeln(result[1]);
                  //    ^ retrieve second match (1 in 0-based indexing)
Run Code Online (Sandbox Code Playgroud)

示例代码:http://jsfiddle.net/LT62w/

编辑:感谢@Alan纠正非捕获匹配的工作原理.

实际上,它运作得很好.在非捕获组内匹配的文本仍然被消耗,与在任何组之外匹配的文本相同.捕获组就像一个具有额外功能的非捕获组:除了分组之外,它还允许您提取与整体匹配无关的任何匹配.