我需要一个正则表达式来选择两个外括号之间的所有文本.
例: some text(text here(possible text)text(possible text(more text)))end text
结果: (text here(possible text)text(possible text(more text)))
要求:两个表达式,exp1和exp2,我们需要匹配两者中的一个或多个。所以我想出了,
(exp1 | exp2)*
Run Code Online (Sandbox Code Playgroud)
但是在某些地方,我看到以下正在使用,
(exp1 * (exp2 exp1*)*)
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?你什么时候会使用一个?
希望小提琴能让这更清楚,
var regex1 = /^"([\x00-!#-[\]-\x7f]|\\")*"$/;
var regex2 = /^"([\x00-!#-[\]-\x7f]*(\\"[\x00-!#-[\]-\x7f]*)*)"$/;
var str = '"foo \\"bar\\" baz"';
var r1 = regex1.exec(str);
var r2 = regex2.exec(str);
Run Code Online (Sandbox Code Playgroud)
编辑:当我们捕获组时,这两个方法之间的行为似乎有所不同。第二种方法捕获整个字符串,而第一种方法仅捕获最后一个匹配组。请参阅更新的小提琴。