如何在捕获组内替换

How to replace within a capture group

我正在修改现有的 HTML 文档。我正在做一些事情,比如添加 table 内容等

我有一个带有此 ID 的标题:id="transcending intellectual limitations"(真的!)

我希望能够找到整个 ID,然后用连字符替换空格。

如果我只有 ID 但我不想删除整个文档中的所有空格,那就简单了。

我是正则表达式的新手,我正在使用 Sublime 的查找和替换来执行此操作。

这是使用 Ruby 作为正则表达式解析器的 2 遍解决方案:

#!/usr/bin/env ruby

line = 'yadayadayadaid="transcending intellectual limitations"yadayadayada'
line =~ /id="(.*)"/
part = .gsub( /\s+/, '-' )
print part

产量:

transcending-intellectual-limitations

请注意,这将替换第 2 遍单词之间的所有空格。

您可以使用

(?:\bid="|(?!^)\G)[^\s"]*\K\s+ 

并替换为您需要替换空格的任何内容。

(?:\bid="|(?!^)\G) 模式设置初始边界:id=" 或最后一次成功匹配的结尾。此模式提供了一个包含两个备选方案的备选列表。 \b 匹配单词边界,因此 id=" 匹配整个单词。 \G 运算符匹配字符串的开头和每次成功匹配之后。为了排除起始位置,添加了负 (?!^) 前瞻( 后面没有字符串起始位置 )。 "Where You Left Off: The \G Assertion" 中查看有关 \G 的更多信息。

[^\s"]* 匹配除空格和引号以外的零个或多个字符。

\K 运算符使正则表达式引擎忽略匹配缓冲区中到目前为止匹配的所有文本。

\s+最终匹配到一个或多个将被替换的空格。

Regex101 Demo