Visual Studio 代码:如何自动执行简单的正则表达式查找和替换?

Visual Studio Code: How to automate a simple regex-find and replace?

我尝试在 Visual Studio 代码中创建一个简单的正则表达式查找和替换任务。

目前我从 AD 中复制了一些用户到 Visual Studio 代码中的一个临时文件,并删除了行开头的 "CN=" 和第一个“,”之后的所有附加信息(正则表达式:,.*$)。这适用于 VSCode 中的 Find&Replace,但每次我想删除它时我都必须手动输入它。

那么问题来了,是否可以将这种任务自动化?我知道有一些外部工具 (https://code.visualstudio.com/docs/editor/tasks) 但我正在努力让它工作......

编辑:请求示例(我的正则表达式正在运行,这不是问题所在:/。我需要一个如何自动执行此任务的示例...)

示例

CN=Test User,OU=Benutzer,OU=TEST1,OU=Vert,OU=ES1,OU=HEADQUARTERS,DC=esg,DC=corp

预期输出

Test User

这个扩展可以完成这项工作:

https://marketplace.visualstudio.com/items?itemName=joekon.ssmacro#overview

正则表达式似乎遵循:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

例子

创建文件regex.json:

[{
    "command": "ssmacro.replace",
    "args": {
        "info": "strip out EOL whitespace",
        "find": "\s+$",
        "replace": "",
        "all": true,
        "reg": true,
        "flag": "gm"
    }
}]

"info"只是提醒,没有任何作用。

keybindings.json中设置快捷方式:

"key": "ctrl+9",
"command": "ssmacro.macro", "args": {"path": "C:\...\regex.json"}

您可以将多个命令一起批处理[{...},{...}],这对于一次性应用一整套正则表达式操作很有用。

到今天为止,不延期似乎还是不行。除了已接受的答案中提出的扩展之外,还有另外 2 个扩展(两者都是开源的):

Batch Replacer (but it doesn't work on the documents open in the editor : "you must have a folder open for editing and all files in it will be updated."*)

Replace Rules:您只需在 settings.json 中添加一些规则(使用 F1ctrl+shift+p 和 select [=14= 打开调色板]).

"replacerules.rules": {
    "Remove trailing and leading whitespace": {
        "find": "^\s*(.*)\s*$",
        "replace": ""
    },
    "Remove blank lines": {
        "find": "^\n",
        "replace": "",
        "languages": [
            "typescript"
        ]
    }
}

扩展文件夹是:%USERPROFILE%\.vscode\extensions

这是我写的一个扩展,它允许您将 find/replaces 保存在文件中或作为命名命令跨文件搜索 and/or 作为键绑定:Find and Transform。使用 OP 的原始问题,进行此设置(在 settings.json 中):

"findInCurrentFile": {                // in settings.json
  "reduceUserEntry": {
    "title": "Reduce User to ...",    // will appear in the Command Palette
    "find": "CN=([^,]+).*",
    "replace": "",
    "isRegex": true,
    // "restrictFind": "selections",     // default is entire document
  }
},

您也可以使用此设置进行跨文件搜索:

"runInSearchPanel": {
  "reduceUserEntry": {
    "title": "Reduce User to ...",      // will appear in the Command Palette
    "find": "CN=([^,]+).*",
    "replace": "",
    "isRegex": true
    
    // "filesToInclude": "${fileDirname}"
    // "onlyOpenEditors": true
    // and more options
  }
}

作为独立的键绑定:

{
  "key": "alt+r",                     // whatever keybinding you want
  "command": "findInCurrentFile",     // or runInSearchPanel
  "args": {
    "find": "CN=([^,]+).*",
    "replace": "",   
    "isRegex": true

扩展也可以 运行 多个 finds/replaces - 只需将它们放入一个数组中即可:

"find": ["<some find term 1>", "<some find term 2>", etc.

与替换相同,将它们组成一个数组。