为什么match()和split()产生不同的结果?

时间:2012-07-12 03:34:15

标签: regex string actionscript-3 split

为什么matchsplit会产生不同的结果?这是在Actionscript 3.0中,但如果在AS3之外也是如此,我想知道为什么这样做。

示例:

var txt:String = "somethingorother";
var re:RegExp = /(\w{2,2})/g;
trace("\t txt.split = " + txt.split(re) + " -- " + txt.split(re).length);
trace("\t txt.match = " + txt.match(re) + " -- " + txt.match(re).length);

结果:

txt.split = ,so,,me,,th,,in,,go,,ro,,th,,er, -- 17
txt.match = so,me,th,in,go,ro,th,er -- 8

编辑:

根据给定的条件,我希望结果是一个相同的数组(在这种情况下,match没有找到奇数长度Strings的最终条目)。为什么split中有额外的条目? split发现match变得“正确”的是什么?

1 个答案:

答案 0 :(得分:4)

split将字符串拆分为另一个字符串或正则表达式,如果参数是后一种情况,则保留所有带括号的组,这是您当前看到的行为。它根本不具有与match相同的功能,用于检索字符串上正则表达式的一个或多个匹配。


split将使用正则表达式拆分字符串,并将括号内的组保留为单独的条目。因此,在拆分时,匹配与它们之间的字符串保持独立,这是空的 - 因此是你的结果。