Select 一个模式的每个实例,在一个模式中,使用正则表达式?

Select each instance of a pattern, inside a pattern, with regex?

我正在尝试从标题上的 HTML ID 中删除空格,并将它们替换为 - 字符。到目前为止,我一直在做一个多步骤的过程。我想使用正则表达式将其压缩为一步。我一直在尝试制作一个正则表达式模式,以在可变模式中突出显示字符的实例,但我没有取得太大的成功。

正则表达式应替换此处的 2 个空格:

<h2 id="three word sentence">

正则表达式应替换此处的 3 个空格:

<h2 id="four words in sentence">

这就是我目前所拥有的,它可以找到每件商品的完整 ID。然后我打开“在选择中查找”并将空格替换为 -.

(?<=<h[234] id=").*(?=")

我怎样才能一步找到空格?

您可以使用

(?:\G(?!\A)|<h\d+\s+id=")[^"\s]*\K\s+(?=[^"]*")

regex demo详情:

  • (?:\G(?!\A)|<h\d+\s+id=") - 上一个成功匹配的结尾或 <h,一个或多个数字,一个或多个空格和 id=" 字符串
  • [^"\s]* - " 和空格
  • 以外的零个或多个字符
  • \K - 匹配重置运算符,它会从整个匹配内存缓冲区中丢弃到目前为止匹配的文本
  • \s+ - 一个或多个空格
  • (?=[^"]*") - 一个积极的前瞻,需要 " 以外的零个或多个字符,然后是当前位置右侧的 " 个字符。