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