我在javascript中遇到以下问题:我想删除字符串中不匹配的括号,因此没有嵌套。
我已从字符串中删除了[^a-z\-()]
以外的所有内容。
只应移除(
和)
。
我认为这描述了我想要发生的事情。
)
,请删除)
(
,则将)
附加到字符串(
,请预览下一个)
并删除之前的所有(
)
,在下一个)
发生之前,不应再有(
。()
,但这可以单独完成。因此a)b()(c)(de)f(g(h)i)j)(k
变为abc(de)f(gh)ijk
a(bc
变为a(bc)
我还希望只保留括号中的唯一字符,但这可以在以后完成
所以aa(bb
变为aa(bb)
然后aa(b)
然后aab
正则表达式是最好的方法吗?
答案 0 :(得分:0)
您可以使用正则表达式来强制执行规则#3& #5但其他人虽然技术上可行但是很难。代码应该更容易编写为处理字符流或迭代字符串,就好像它是一个字符数组。你只需跟踪你所处的状态......
虽然正则表达式很棒但它并不总是最好的工具。
答案 1 :(得分:0)
您将需要一个Parser,例如:
function gets(s, depth) {
var out = '';
while (s.length) {
var c = s.shift();
if (c == '(') {
var p = gets(s, depth + 1);
if (!depth && p.length > 1)
p = '(' + p + ')'
out += p;
} else if (c == ')') {
if (depth)
return out;
} else {
out += c
}
}
return out;
}
str = "So a)b()(c)(de)f(g(h)i)j)(k"
result = gets(str.split(""), 0)