让正则表达式在 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
[
和 /
等需要在正则表达式中转义以避免它被解释为字符 class.
- 使用
*?
我们使用惰性量词在匹配之前尽可能少地匹配[/img]
- 如果我们将
-
放在字符 class 的开头或结尾,则不需要转义
- 字符中的点不需要转义class
为什么不这样写:
\[img](.*?)\[\/img]/g
注意:使用?
禁止贪心匹配
我在 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
[
和/
等需要在正则表达式中转义以避免它被解释为字符 class.- 使用
*?
我们使用惰性量词在匹配之前尽可能少地匹配[/img]
- 如果我们将
-
放在字符 class 的开头或结尾,则不需要转义 - 字符中的点不需要转义class
为什么不这样写:
\[img](.*?)\[\/img]/g
注意:使用?
禁止贪心匹配