You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:33:22