html - VScode - 用值替换捕获的组

标签 html regex visual-studio-code

我在代码中有一堆字符串,例如: <td style="background-color:#fdfdff">&nbsp;</td><td>&nbsp;</td> 在一个文件中。

目标是替换&nbsp;来自第一个示例 0,而 &nbsp;来自 - (破折号)

的第二个示例

我正在使用 VScode 正则表达式,但找不到用特定值替换捕获的组的方法,因为 $1、$2 组指的是原始字符串组。 这只是一个例子,我是如何尝试实现这一目标的,但 VScode 不会忽略分组的正则表达式。

enter image description here

最佳答案

另一种方法是使用可以进行条件替换的代码片段。使用此代码段:

    "replaceTDs": {
      "prefix": "tdr",    // whatever prefix you want 
      "body": [
        "${TM_SELECTED_TEXT/(?<=\">)(&nbsp;)|(&nbsp;)/${1:+0}${2:+-}/g}",
      ]
    }

条件替换可以非常简单,因为您首先 find并仅选择您感兴趣的两个备选文本。所以

查找:<td\s*(style="[^"]*"\s*)>&nbsp;</td>|<td>&nbsp;</td>旧版本

这个更简单的查找可能对您有用:

<td\s*(style="[^"]*")?\s*>&nbsp;</td>

不要替换,而是 Control+Shift+L :选择所有两个选项。 Esc 从查找小部件中聚焦到编辑器。

然后应用您的代码段,在本例中键入 tdr +制表符

所有的改变都完成了。您只需制作一次代码片段,然后进行一次查找。

td replacement demo


这种技术比运行尽可能多的查找/替换要好一些,因为你有替换要做。即使有更多的条件替换,也可能是对一个片段的简单更改以添加更多替换。


此外,如果您使用键绑定(bind)来触发您的代码段(您不必从查找小部件更改焦点 - 或创建单独的代码段),您还可以进一步简化此过程。所以没有片段,但是这个键绑定(bind):

 {
    "key": "alt+w",
    "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "${TM_SELECTED_TEXT/(?<=\">)(&nbsp;)|(&nbsp;)/${1:+0}${2:+-}/g}"  
    },
    "when": "editorHasSelection"
  }

现在是同一个演示:

td replacement keybinding

关于html - VScode - 用值替换捕获的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65170303/

相关文章:

javascript - Electron/NodeJS/VSCode : What kind of syntax or infrastructure problems won't show in Debug Console?

html - 来自 float :left and right to under eachother

javascript - AngularJS : Routing

javascript - 给定一个 ID,找到最后一句话并将其替换为跨度包装器

c++ - Qt/QRegularExpression - 无法捕获所有结果,只能捕获第一个实例,为什么?

python - Visual Studio Code 新手,遇到 pandas/numpy 问题

jquery - 如何在不考虑浏览器高度的情况下删除滚动条

html - SEO:隐藏标题是否合适(因为 HTML5 概述)

regex - Linux bash 中文件名中的时间戳匹配正则表达式的问题

visual-studio-code - 如何在 VS Code 中更 retrofit 订线宽度?