首页 > 解决方案 > 在 vscode 片段正则表达式中使用美元符号

问题描述

我正在尝试制作一个从$code占位符输入生成此行的 vs 代码 php 片段:

Utils::getLogger.debug("code", ["code" => $code])

我为此使用的正则表达式是/(\$?)(.*)/(我对第二个捕获组感兴趣以获取变量名)。

这是我的代码段:

"log debug": {
    "prefix": ["log debug", "debug"],
    "body": ["Utils::getLogger.debug(\"${1/(^\\$?)(.*)/$2/}\", [\"${1/(^\\$?)(.*)/$2/}\" => ${1:variable}])"],
    "description": "Quick variable debug."
},

问题是它不能替换我输入的美元符号。如果我$variable作为占位符给出,它会生成Utils::getLogger.debug("$variable", ["$variable" => $variable]).

我让它为一个不同于美元符号的字符工作,例如一个逗号或另一个字母,我也让它工作使用TM_SELECTED_TEXT变量并在之前选择我的变量。

我怀疑这与 vscode 中的 vs code php 变量名自动完成有冲突,就好像我复制了我的变量然后调用代码段并将变量粘贴到占位符中(而不是键入它),它也可以工作。

我很想将此作为问题发布在 vscode github 上,但可能在这里做错了。

ps:我知道也可以在没有的情况下输入变量名$并将其添加到替换正则表达式中,但是您知道开发人员可以...

标签: visual-studio-codevscode-snippets

解决方案


这有效:

"body": ["Utils::getLogger.debug(\"${2:${1/\\$?(.*)/$1/}}\", [\"$2\" => ${1:variable}])"],

请注意,由于您正在重用第一个转换,因此我将其设置为一个占位符${2},如下所示:

${2:${1/\\$?(.*)/$1/}}

现在,您可以在任何需要相同转换结果的地方重用该$2占位符- 就像在.\"$2\" =>

感谢https://stackoverflow.com/a/66449064/836330的使用。

片段演示删除 $


推荐阅读