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

whitzsjs  于 2021-09-23  发布在  Java
关注(0)|答案(3)|浏览(355)

我对正则表达式和javascript有些生疏。我有以下字符串变量:

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

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

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

如是:

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

结果是:

loadNewsItemWithIndex(5

什么是最干净、最可读的提取方法 5 作为一个班轮?是否可以通过排除 loadNewsItemWithIndex( 从匹配而不是匹配 5 作为一个小组?

xhv8bpkk

xhv8bpkk1#

来自的返回值 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对非捕获匹配工作方式的更正。
实际上,它工作得很好。在非捕获组内匹配的文本仍被使用,与在任何组外匹配的文本相同。捕获组类似于具有额外功能的非捕获组:除了分组之外,它还允许您独立于整体匹配提取匹配的内容。

ecbunoof

ecbunoof2#

我相信以下正则表达式应该适用于您:

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
1wnzp6jl

1wnzp6jl3#

这应足以:

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

相关问题