我有以下字符串
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6')) AND (((SUM_RevisionAnomalia_UltRevision_1M = 1) AND (CANT_ConsumoFact_UltRevision_1M > 1)) OR ((SUM_RevisionNoAnomalia_UltRevision_1M + 1) AND (CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2))) OR (SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
我试图提取所有内部组,所以我的答案应该包含
([Valor][Corr][Fat]: 6M UC x Viz. Lógicos IN('3','6'))
(SUM_RevisionAnomalia_UltRevision_1M = 1)
(CANT_ConsumoFact_UltRevision_1M > 1)
(SUM_RevisionNoAnomalia_UltRevision_1M + 1)
(CANT_ConsumoFact_UltRevision_1M BETWEEN 1 - 2)
(SUM_RevisionNoAnomalia_UltRevision_1M <= 1)
当括号内只有一组字符串时,很容易提取它,但是当给出上面的例子时,我的正则表达式会捕获整个字符串。 我正在使用的正则表达式是
/(\([a-zA-Z0-9\[\]:_+=-\s\.\(\),'óáéíúüçãôàäê><]+\))/g
答案 0 :(得分:1)
您似乎只想匹配(
和)
之间不是(
和)
的内容,除非它们是(...)
之前是一个单词字符。
您可以使用
\((?:[^()]|\b\([^()]*\))*\)
请参阅regex demo
正则表达式分解:
\(
- 匹配文字(
(?:[^()]|\b\([^()]*\))*
- 零个或多个序列:
[^()]
- (
和)
|
- 或...... \b\([^()]*\)
- 一个单词边界(即在该位置之前,必须有一个单词字符),然后是(
,后面跟着(
和{{1}以外的零个或多个字符} )
- 结束\)
替代模式可以是展开的模式(使用更长的输入更有效):
)
请参阅another demo