JS regexp:exec():将不同的组“合并”到相同的结果

时间:2013-12-05 14:46:16

标签: javascript regex

简化示例:使用此正则表达式

/^(?:(a)(b)|(c)(d))$/.exec(value);
如果匹配,

会产生一个包含5个元素的数组

["ab", "a", "b", undefined, undefined]

["cd", undefined, undefined, "c", "d"]

是否可以通过某种方式更改正则表达式以获得以下结果?任

["ab", "a", "b"]

["cd", "c", "d"]

但仍不匹配“ad”或“cb”?

(注意a,b,c和d实际上应该是任意复杂的正则表达式。)

2 个答案:

答案 0 :(得分:3)

是的,您可以使用Array#filter()方法:

m = /^(?:(a)(b)|(c)(d))$/.exec('ab').filter(Boolean);
//=> ["ab", "a", "b"]

答案 1 :(得分:0)

可能的愚蠢回答:D

var result = /^(a)(b)$/.exec(value) || /^(c)(d)$/.exec(value);