簡體   English   中英

如何在尊重嵌套的情況下在兩個花括號之間找到代碼?

[英]How can I find code between two braces, respecting nesting?

我試圖在兩個花括號之間獲取代碼,但仍要注意嵌套。 假設我輸入以下內容:

while (true) {                    [A]
    dothis();
    if (whattype() == "A") {      [B]
        doA();
        if (other() == "dog") {   [C]
            doB();
        }                         [D]
    }                             [E]
    if (other() == "cat") {       [F]
        doZ();
    }                             [G]
}                                 [H]

我想遞歸循環每個嵌套層:

while
- if
  - if
- if

當前函數采用字符串,使用正則表達式( \\{([\\s\\S]*)\\} )貪婪地查找第一個和最后一個大括號之間的代碼,然后再次對其內容進行處理,直到字符串中不再有大括號。

問題是正則表達式不適用於彼此相鄰的代碼塊。 正則表達式匹配B到G之前的文本。它應從B開始並在E處停止,然后是從F到G的另一個塊。

編輯 :我可能最終會使用正則表達式以外的東西。 關於如何處理有什么建議嗎?


對於未來的讀者:

我發現樂於助人, 從另一個SO問題的答案。

消耗整個塊的正則表達式無法解決此類問題。

您所描述的內容確實需要對JavaScript語言進行完整且正確的標記化。 例如,考慮一下在帶引號的文本中可能包含方括號...除非您實際上看到更多的好處,否則我會嘗試自己做所有事情,而不是在合理的時間內實際取得成功(例如您正在四處尋找解析器的工作原理) ,那么您肯定應該看看JS解析器中現有的一些JS。 參見例如: http : //marijnhaverbeke.nl/blog/acorn.html (請注意,這是Google給我的第一個結果,從未嘗試過該庫)。

暫無
暫無

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

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