在 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+ 个字符,然后是 '
.
在我的 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+ 个字符,然后是'
.