正则表达式替换方括号之间的字符,但不替换括号之间的字符

Regex to replace character between square brackets, but not between parenthesis

我有一个 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)

我可以用 (?<=\[).+?(?=\]) 匹配括号内的 所有 文本,但是如何只匹配破折号 -?

您可以使用

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

替换为space。参见 regex demo.

详情

  • (?:\G(?!\A)|\[) - 上一次成功匹配的结束或 [
  • [^][-]* - 除了 ][-
  • 之外的任何 0+ 个字符
  • \K - 匹配重置运算符丢弃整个匹配内存缓冲区中到目前为止匹配的所有文本
  • - - 一个连字符
  • (?=[^][]*]) - 随后是 0+ 个非括号字符,直到 ] 字符。