[英]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.