簡體   English   中英

正則表達式用於在嵌套括號內獲取值

[英]Regex for getting values inside nested brace

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

(((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完成,但我不是regex的專業人士。 謝謝你們..

$1替換\\(\\(([^()]+)\\)(?: [AZ]+)+\\)可能會滿足您的需求:

正則表達式可視化

通過Debuggex進行可視化


在JavaScript中:

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

我不確定我是否正確理解了您的問題,但是如果您想獲取嵌套括號中的最里面的值,可以使用以下命令:

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

它將捕獲“(”和“)”之間的所有字符,條件是中間沒有其他“(”)字符

在您的最后一個示例中,它將捕獲

熱能熱能熱能

演示版

編輯

如果您還需要在嵌套花括號之外進行匹配,則可以使用以下方法:

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

我只是添加了相同的正則表達式來反轉花括號

在您的最后一個示例中,它將匹配

熱,熱,熱與能量或熱

演示版

您不能使用正則表達式執行此操作,因為我相信您正在談論的是任意嵌套的括號。 參考

我看到您想要最里面的值,請使用此模式

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

演示版

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM