English 中文(简体)
在较大的正则表达式中使用一组括号捕获多个匹配。
原标题:
  • 时间:2009-03-25 20:49:58
  •  标签:

我有一个正则表达式(Javascript),大概是这样的...

/(x)(y)+(z)/gi /(x)(y)+(z)/gi

问题在于,即使(y)+多次匹配,我始终只能从那些括号中获得3个捕获。如果它确实匹配多次,它只会返回最后一次匹配。我无法预先知道y将在任何给定运行中匹配多少次,但我希望捕获所有这些。

有什么想法吗?

最佳回答

我会使用

/(x)(y+)(z)/gi

然后取匹配第二组的文本,并进一步解析它。

问题回答

我理解你不能用。

/(x)((?:y)+)(z)/gi

因为这是“更大的正则表达式”的一部分?

将加号移至括号内部,然后将 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
",
    "y is ", join(", ", @y), "
",
    "z is $z
";

这里有一些我凑合着写的垃圾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>




相关问题
热门标签