在 VSCode / Sublime 中替换正则表达式捕获组

Manipulate regex capture group in replacement in VSCode / Sublime

在我的 Javascript 文件中,我想替换:

var user1 = {id: 'Alan Banks'};
var user2 = {id: 'Chris Daily'};

var user1 = {id: 'Alan_Banks'};
var user2 = {id: 'Chris_Daily'};

我可以在 VSCode、Sublime(还有 Dreamweaver,出于绝望)中使用以下正则表达式匹配用户名:

id: '(.*?)'

因此捕获组 </code> 现在包含每个用户的 <code>id 属性 的内容。

如何执行操作的第二部分,用下划线替换捕获的子字符串中的空格?

Visual Studio代码中,可以使用

查找: (?<=id:\s*'[^']*?)\s(?=[^']*')
替换_

regex demo。详情:

  • (?<=id:\s*'[^']*?) - 匹配前面紧跟 id:、0+ 空格、' 以及除 [= 之外的任何 0 个或更多字符的位置的正前瞻14=]越少越好
  • \s - 一个空格
  • (?=[^']*') - 匹配一个位置的正前瞻,该位置紧随其后的是 ' 以外的 0+ 个字符,然后是 '.

Sublime Text 3中,支持PCRE正则表达式搜索和替换,可以使用

查找(?:\G(?!\A)|id:\s*')[^'\s]*\K\s(?=[^']*')
替换_

参见 another regex demo。详情:

  • (?:\G(?!\A)|id:\s*') - 上一场比赛结束或 id:,0+ 空格和 '
  • [^'\s]* - 除了 ' 和空格
  • 之外的 0+ 个字符
  • \K - 忽略目前匹配的所有文本
  • \s - 一个空格
  • (?=[^']*') - 匹配一个位置的正前瞻,该位置紧随其后的是 ' 以外的 0+ 个字符,然后是 '.