Regex для замены символа в квадратных скобках, но не в скобках - PullRequest
1 голос
/ 28 февраля 2020

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

[filename-with-some-words](/001-folder/filename-with-some-words.md)
[title-with-other-words](/001-folder/title-with-other-words.md)
[other-words](/001-folder/other-words.md)

Я хочу заменить - в квадратных скобках [], но не в скобках () так, что мой конечный результат будет выглядеть так:

[filename with some words](/001-folder/filename-with-some-words.md)
[title with other words](/001-folder/title-with-other-words.md)
[other words](/001-folder/other-words.md)

Я могу сопоставить весь текст в скобках с (?<=\[).+?(?=\]), но как мне сопоставить только da sh - * * 1014

1 Ответ

2 голосов
/ 28 февраля 2020

Вы можете использовать

(?:\G(?!\A)|\[)[^][-]*\K-(?=[^][]*])

Заменить на пробел. См. regex demo .

Подробности

  • (?:\G(?!\A)|\[) - либо конец предыдущего успешного матча, либо [
  • [^][-]* - любые 0+ символов, кроме ], [ и -
  • \K - оператор сброса совпадений, отбрасывающий весь сопоставленный текст так далеко от всей памяти совпадений буфер
  • - - дефис
  • (?=[^][]*]) - за которым следует 0+ не скобочных символов до ] символа.
...