输入= ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))
预期输出= ABCDEF,GHIJKLMN,OPQRSTUVW
到目前为止已经尝试了
Output = Input.replace(/ *\([^)]*\)*/g, "");
答案 0 :(得分:4)
在这里使用正则表达式可能无法工作或缩放,因为您希望输入字符串中包含嵌套括号。当输入存在已知且固定的结构时,正则表达式运行良好。相反,我建议您使用解析器来处理此问题。在下面的代码中,我迭代输入字符串,一次是一个字符,我使用一个计数器来跟踪有多少个开括号。如果我们在括号内,那么我们就不记录这些字符。我在最后还有一个简单的替换来删除空格,这是输出所暗示的另一个步骤,但是你从未明确提到过。
var pCount = 0;
var Input = "ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))";
var Output = "";
for (var i=0; i < Input.length; i++) {
if (Input[i] === '(') {
pCount++;
}
else if (Input[i] === ')') {
pCount--;
}
else if (pCount == 0) {
Output += Input[i];
}
}
Output = Output.replace(/ /g,'');
console.log(Output);
&#13;
答案 1 :(得分:2)
如果您需要删除嵌套括号,可以使用Remove Nested Patterns with One Line of JavaScript中的技巧。
var Input = "ABCDEF ((3) abcdef),GHIJKLMN ((4)(5) Value),OPQRSTUVW((4(5)) Value (3))";
var Output = Input;
while (Output != (Output = Output.replace(/\s*\([^()]*\)/g, "")));
console.log(Output);
此处,\s*\([^()]*\)
匹配0 +空格,(
,除(
和)
以外的0 +字符,然后是)
,以及替换操作重复,直到字符串没有改变。