我需要
{{
}}
}}
样品:
dummy text
{{ text to be matched }}
more dummy text dummy
dummy {{ foo { bar }} dummy text
dummy text
{{}}}
结果:
匹配1:
{{ text to be matched }}
第0组:
text to be matched
匹配2:
{{ foo { bar }}
第0组:
foo { bar
匹配3:
{{}}}
第0组:
}
我遇到的问题是not }}
部分,因为Javascript没有原子组。
我不能否定非捕获组并像这样重复它
{{ match {{
( capture
^(?:}})+ not "}}" 1+ times
) end capture
}} match }}
这种/{{(.+)}}/
有效但只有我没有换行符。
答案 0 :(得分:3)
为了满足您的要求,您可以使用以下模式:
{{([^}]*(?:}[^}]+)*}*)}}
细节:
{{
(
[^}]* # all that is not a closing bracket
(?:
}[^}]+ # a closing bracket followed by at least one other character
)*
}* # eventual closing brackets at the end
)
}}
另一种方式(更短但效率更低):
{{([^]*?)}}(?!})
注意:问题与原子组无关。
答案 1 :(得分:0)
试试这个:
/\{\{([\s\S]+?)\}\}/
序列[\s\S]
与任何字符匹配,包括EOL。然后一个懒惰的量词(+?
)保存了这一天。
答案 2 :(得分:0)
JS正则表达式中的这/ /({。+)}}}}}有效,但只有我没有换行符。
.
与换行符不匹配 - 您可以在正则表达式中使用[\s\S]
。