让正则表达式在 bbcode 中找到最小的组

make regex find smallest groups in bbcode

我在 Javascript 工作,我有以下正则表达式:

[img]([a-z0-9\-\./]+[^"\' ]*)[/img]/g

当我有以下文本时(space 分隔两组):

[img]http://www.bla.com[/img] [img]http://www.bla.com[/img]

正则表达式成功找到了 2 个独立的组。

然而,当给出以下文本时(两组之间没有 space 分隔):

[img]http://www.bla.com[/img][img]http://www.bla.com[/img]

正则表达式不会将其分成 2 组,而是分成 1 个大组,其中包含 http://www.bla.com[/img][img]http://www.bla.com

为了让正则表达式找到没有被 space 分隔的最小组,我错过了什么?

您可以使用这个正则表达式:

/\[img]([-a-z0-9.\/]+[^"'\s]*?)\[\/img]/g

RegEx Demo

  • [/ 等需要在正则表达式中转义以避免它被解释为字符 class.
  • 使用*?我们使用惰性量词在匹配之前尽可能少地匹配[/img]
  • 如果我们将 - 放在字符 class 的开头或结尾,则不需要转义
  • 字符中的点不需要转义class

为什么不这样写:

\[img](.*?)\[\/img]/g

注意:使用?禁止贪心匹配