以下是我正在使用的字符串
(((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完成,但我不是正则表达式的专业人士。谢谢大家..
答案 0 :(得分:2)
\(\(([^()]+)\)(?: [A-Z]+)+\)
替换$1
可能符合您的需求:
的可视化
在JavaScript中:
var output = input.replace(/\(\(([^()]+)\)(?: [A-Z]+)+\)/g, "$1");
答案 1 :(得分:1)
我不确定我是否正确理解了你的问题,但是如果你想在嵌套大括号中获得最里面的值,你可以使用它:
/\(((?:(?>[^\(]))*?)\)/g
它将捕获“(”和“)”之间的所有字符,条件是没有其他“(”之间的字符
在上一个例子中,它会捕获
热能热能热
修改强>
如果你需要在嵌套大括号外面匹配,你可以使用它:
/\(((?:(?>[^\(]))*?)\)|\)((?:(?>[^\)]))*?)\(/g
我刚刚添加了反转大括号的相同正则表达式
在上一个示例中,它将匹配
热,热,热和能量或热
答案 2 :(得分:0)
你不能用正则表达式来做这件事,因为我相信你在谈论任意嵌套的括号。 Reference
答案 3 :(得分:0)
我看到你想要最内在的值,使用这个模式
\(([^()]+)\)
\( # "("
( # Capturing Group (1)
[^()] # Character not in [()] Character Class
+ # (one or more)(greedy)
) # End of Capturing Group (1)
\) # ")"