用于获取嵌套大括号

时间:2015-08-13 14:21:17

标签: javascript regex

以下是我正在使用的字符串

(((Thermal) WN RR) AND ((Energy) SS AB)), Text only

以上文字需要转换为

Thermal AND Energy

如何实现这一目标。这应该是通用的,如果值为

,这也应该有效
((Thermal) WN TR)
((Thermal) WN RR) AND ((Energy) SS AB) OR ((Thermal) WN RR)

非常感谢任何帮助。提前致谢

解决方案: 感谢@spOOm使用他的正则表达式,以下是我用来解决问题的代码

q = <Query String>
q =     q.substring(0, q.lastIndexOf(')')+1);
q =     q.replace(/\(\(([^()]+)\)(?: [^()]+)+\)/g, "$1");

第一次设置可以由Regex完成,但我不是正则表达式的专业人士。谢谢大家..

4 个答案:

答案 0 :(得分:2)

\(\(([^()]+)\)(?: [A-Z]+)+\)替换$1可能符合您的需求:

Regular expression visualization

Debuggex

的可视化

在JavaScript中:

var output = input.replace(/\(\(([^()]+)\)(?: [A-Z]+)+\)/g, "$1");

答案 1 :(得分:1)

我不确定我是否正确理解了你的问题,但是如果你想在嵌套大括号中获得最里面的值,你可以使用它:

/\(((?:(?>[^\(]))*?)\)/g

它将捕获“(”和“)”之间的所有字符,条件是没有其他“(”之间的字符

在上一个例子中,它会捕获

热能热能热

Demo

修改

如果你需要在嵌套大括号外面匹配,你可以使用它:

/\(((?:(?>[^\(]))*?)\)|\)((?:(?>[^\)]))*?)\(/g

我刚刚添加了反转大括号的相同正则表达式

在上一个示例中,它将匹配

热,热,热和能量或热

Demo

答案 2 :(得分:0)

你不能用正则表达式来做这件事,因为我相信你在谈论任意嵌套的括号。 Reference

答案 3 :(得分:0)

我看到你想要最内在的值,使用这个模式

\(([^()]+)\)

Demo

\(              # "("
(               # Capturing Group (1)
  [^()]         # Character not in [()] Character Class
  +             # (one or more)(greedy)
)               # End of Capturing Group (1)
\)              # ")"