使用OR时空的正则表达式组?

时间:2013-11-10 16:54:36

标签: javascript regex

在javascript中使用正则表达式^\[(.*?)\]$|(.*)时,会创建一个空组(undefined)。我猜测这是由于OR尝试第一场比赛并且如果失败则创建一个空组,或者与第二组相反。是否有任何方法可以使它在javascript中使用regex.exec(string)时只返回一个组?

我的测试代码如下;

var regex = /^\[(.*?)\]$|(.*)/;

console.log(regex.exec("[test]")); // ["[test]", "test", undefined]
console.log(regex.exec("test")); // ["test", undefined, "test"]

3 个答案:

答案 0 :(得分:1)

只需将所有内容包装在一个组中:

var regex = /^(\[(.*?)\]$|(.*))/;
regex.exec("[test]")
> ["[test]", "[test]", "test", undefined]
regex.exec("test")
> ["test", "test", undefined, "test"]

结果将始终是组1。

要摆脱内部群体,使其无法捕捉:

> var regex = /^(\[(?:.*?)\]$|(?:.*))/;
regex.exec("[test]")
> ["[test]", "[test]"]
regex.exec("test")
> ["test", "test"]

答案 1 :(得分:1)

您可以在正则表达式中选择方括号:

^\[?(.*?)\]?$

并拥有match group #1

中的所有内容

答案 2 :(得分:1)

那么,为什么你在第二组匹配整个输入时甚至使用正则表达式?

var input = '[test]',
    match = input.match(/^\[(.*?)\]$/),
    result = match? match[1] : input;

console.log(result);