我有一个正则表达式(javascript),就像......
/(X)(Y)+(Z)/ GI
问题在于,即使(y)+匹配多次,我也总能从这些parens中获得3次捕获。如果它匹配多次,则只返回最后一个匹配。我无法提前知道y在任何给定的运行中会匹配多少次,但我想捕获所有这些。
有什么想法吗?
答案 0 :(得分:4)
我会用
/(x)(y+)(z)/gi
然后获取与第二组匹配的文本并进一步解析。
答案 1 :(得分:3)
我认为你不能使用
/(x)((?:y)+)(z)/gi
因为这是“更大的正则表达式”的一部分吗?
答案 2 :(得分:2)
移动括号内的+,然后将y拆分为各个部分。以下是Perl,但它应该给你一个想法:
#!/usr/bin/perl
use strict;
use warnings;
my $s = "abcbcbcd";
my ($x, $y, $z) = $s =~ /(a)((?:bc)+)(d)/;
my @y = $y =~ /(bc)/g;
print "x is $x\n",
"y is ", join(", ", @y), "\n",
"z is $z\n";
这里有一些糟糕的Javascript我一起入侵(我真的不懂Javascript):
<html>
<body>
<script type="text/javascript">
var str = "abcbcbcd";
var matches = str.match(/(a)((?:bc)+)(d)/);
var x = matches[1];
var y = matches[2].match(/(bc)/g);
var z = matches[3];
document.write(
"x is ", x, "<br />",
"y is ", y.join(", "), "<br />",
"z is ", z
);
</script>
</body>
</html>