在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"]
答案 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);