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