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

时间:2011-09-21 19:48:23

标签: javascript regex

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

var subject = "javascript:loadNewsItemWithIndex(5, null);";

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

/(?:loadNewsItemWithIndex\()[0-9]+/)

如此应用:

subject.match(/(?:loadNewsItemWithIndex\()[0-9]+/)

结果是:

loadNewsItemWithIndex(5

什么是最简洁,最可读的方式来提取5作为一行?是否可以通过从匹配中排除loadNewsItemWithIndex(而不是将5作为子组进行匹配来实现此目的?

3 个答案:

答案 0 :(得分: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)

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

修改:感谢@Alan纠正非捕获匹配的工作原理。

  

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

答案 1 :(得分:4)

我相信以下正则表达式适合您:

loadNewsItemWithIndex\(([0-9]+).*$

var test = new RegExp(/loadNewsItemWithIndex\(([0-9]+).*$/);
test.exec('var subject = "javascript:loadNewsItemWithIndex(5, null);";');

分解是

loadNewsItemWithIndex = exactly that

\( = open parentheses 

([0-9]+) = Capture the number
.* = Anything after that number

$ = end of the line

答案 2 :(得分:3)

这应该足够了:

<script>
var subject = "javascript:loadNewsItemWithIndex(5, null);";
number = subject.match(/[0-9]+/);
alert(number);
</script>