我的正则表达式和javascript上有点生疏。我有以下字符串var:
var subject = "javascript:loadNewsItemWithIndex(5, null);";
我想使用正则表达式提取5
。这是我的正则表达式:
/(?:loadNewsItemWithIndex\()[0-9]+/)
如此应用:
subject.match(/(?:loadNewsItemWithIndex\()[0-9]+/)
结果是:
loadNewsItemWithIndex(5
什么是最简洁,最可读的方式来提取5
作为一行?是否可以通过从匹配中排除loadNewsItemWithIndex(
而不是将5
作为子组进行匹配来实现此目的?
答案 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>