簡體   English   中英

如何將轉義的\\ {添加到以下正則表達式?

[英]How can I add escaped \{ to the following regex?

我正在用JS構建Twig / Jinja模板解析器,並且需要在JavaScript中匹配以下字符串:

{%render "base"%}
{% render "base" with {"color":"red0xFF0000", "number": 123} %}

到目前為止,我擁有以下Regex,如RegexBuddy中內置的:

\{% ?render *"[a-z0-9:._]+" ?((?:with +)({([^\{\}]*)}))? ?%}

這樣可以匹配上面的兩個渲染標簽,但是,我想允許轉義的\\{\\}到with {...}子句的主體。

我現在已經嘗試了所有方法,但無法100%正常工作。 例如,當我添加像這樣的花括號時:

{% render "base" with {"color":"red\{0xFF0000\}", "number": 123} %}

字符串不匹配,因為它終止於第一個{剛過去red

基本上,我希望正則表達式匹配,但忽略{前綴\\

有任何想法嗎?

您能否將相關部分轉換為懶惰搶東西(。*?)? <不是正則表達式的一部分! <或那個位<或這個....等

{% ?render *"[a-z0-9:._]+" ?((?:with +)({(.*?)}))? ?%}
{% ?render *"[a-z0-9:._]+" ?((?:with +)({[^{}\\]*(?:\\.[^{}\\]*)*}))? ?%}

棘手的部分是這樣的:

{[^{}\\]*(?:\\.[^{}\\]*)*}

在大括號之后,它匹配零個或多個不是大括號或反斜杠的內容- [^{}\\\\]* 如果遇到反斜杠,則會使用該斜杠和下一個字符- \\\\. 它會重復執行該過程多次,直到達到未轉義的閉合括號為止。

暫無
暫無

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

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