JavaScript正则表达式:make ungreedy

时间:2010-02-15 01:40:10

标签: javascript regex

我有这个正则表达式,它查找%{any charactering including new lines}%

/[%][{]\s*((.|\n|\r)*)\s*[}][%]/gm

如果我在像“%{hey}%”这样的字符串上测试正则表达式,正则表达式会返回“hey”作为匹配。

但是,如果我给它“%{hey} %% {there}%”,它与“嘿”和“那里”分别不匹配,它有一个匹配 - “嘿} %% {那里”

如何使其不合适,以便为每个%{}%返回一个匹配项?

3 个答案:

答案 0 :(得分:5)

在明星之后添加问号。

/[%][{]\s*((.|\n|\r)*?)\s*[}][%]/gm

答案 1 :(得分:3)

首先,要使通配符匹配非贪婪,只需将其附加?*?代替*+?而不是+ )。

其次,您的模式可以通过多种方式进行简化。

/%\{\s*([\s\S]*?)\s*\}%/gm

无需在方括号中放置单个字符。

最后在你要捕捉的中间表达,你会注意到我放了[\s\S]。这来自Matching newlines in JavaScript,可替代DOTALL行为。

答案 2 :(得分:1)

工作更短,更快:

/%\{([^}]*)\}%/gm
相关问题