сделать регулярное выражение найти самые маленькие группы в bbcode - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю в Javascript, и у меня есть следующее регулярное выражение:

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

Когда у меня есть следующий текст (с пробелом, разделяющим две группы):

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

регулярное выражение находит две отдельные группы успешно.

Однако, если задан следующий текст (без пробела, разделяющего две группы):

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

регулярное выражение не разделяет его на 2 группы, носкорее 1 большая группа с http://www.bla.com[/img][img]http://www.bla.com внутри.

Чего мне не хватает, чтобы заставить регулярное выражение находить наименьшие группы, когда они не разделены пробелом?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

почему бы просто не написать это так:

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

примечание: используйте ?, чтобы запретить жадное сопоставление.

0 голосов
/ 22 сентября 2018

Вы можете использовать это регулярное выражение:

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

Демонстрация RegEx

  • [ и / и т. Д. Необходимо экранировать в регулярном выражении дляизбегайте его интерпретации как класса символов.
  • Используя *?, мы используем ленивый квантификатор, чтобы соответствовать как можно меньшему количеству, прежде чем сопоставить [/img]
  • Если мы помещаем - в начале иликонец в символьном классе, тогда ему не нужно экранировать
  • точка не должна экранироваться в символьном классе
...