VSCode代码片段条件转换问题:无冒号行被错误添加冒号
VS Code代码片段:仅对含冒号的行替换首个冒号为双冒号
问题描述
你需要实现一个VS Code代码片段,将选中文本中每行的首个冒号替换为双冒号,但当前代码片段会给无冒号的行自动添加开头冒号:
原代码片段:
"Description List": { "body": [ "${TM_SELECTED_TEXT/^(.+:)(.+)$/$1:$2/gm}" ], "description": "Description List" },
输入示例:
Point One: This is first line Point Two: This is second line This is third line
实际错误输出:
Point One:: This is first line Point Two:: This is second line :This is third line
期望输出:
Point One:: This is first line Point Two:: This is second line This is third line
解决方案
调整正则表达式,仅匹配包含冒号的行,并精准替换首个冒号为双冒号,修改后的代码片段如下:
"Description List": { "body": [ "${TM_SELECTED_TEXT/^([^:]+):(.*)$/$1::$2/gm}" ], "description": "Description List" },
原理说明
- 正则
^([^:]+):(.*)$的作用:^([^:]+):匹配行首到第一个冒号前的所有非冒号字符,存入捕获组1::匹配首个冒号(.*)$:匹配冒号后的所有内容,存入捕获组2
- 替换规则
$1::$2:将捕获组1的内容、双冒号、捕获组2的内容拼接,实现单个冒号转双冒号 - 修饰符
gm:全局匹配(所有行)+ 多行模式(每行独立匹配) - 对于无冒号的行,正则无法匹配,会直接保留原行内容,不会做任何修改
如果你想用条件替换的方式实现(兼容更复杂的场景),也可以用以下写法:
"Description List": { "body": [ "${TM_SELECTED_TEXT/^(.+:)?(.+)$/${1:+$1:}$2/gm}" ], "description": "Description List" },
这里${1:+$1:}表示:如果捕获组1(包含冒号的前缀)存在,则输出$1:(即原前缀加一个额外冒号);如果不存在,则输出空,直接保留捕获组2的完整行内容。
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

