繁体   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