我有这个正则表达式寻找%{any charactering including new lines}%:
/[%][{]\s*((.|\n|\r)*)\s*[}][%]/gm
Run Code Online (Sandbox Code Playgroud)
如果我测试的,如"%{}哎%"的字符串正则表达式,正则表达式返回"哎"的比赛.
但是,如果我给它"%{hey} %% {there}%",它与"嘿"和"那里"分别不匹配,它有一个匹配 - "嘿} %% {那里".
如何使其不合适,以便为每个%{}%返回一个匹配项?
首先,要使通配符匹配非贪婪,只需在其后面附加?(so*?而不是*和+?而不是+)。
其次,您的模式可以通过多种方式简化。
/%\{\s*([\s\S]*?)\s*\}%/gm
Run Code Online (Sandbox Code Playgroud)
无需将单个字符放在方括号中。
最后,您要捕获中间的表达式,您会注意到我放置了[\s\S]。这来自于JavaScript 中的匹配换行符作为行为的替代DOTALL。