微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VS代码段中的嵌套正则表达式替换

如何解决VS代码段中的嵌套正则表达式替换

在重新构造文本(rst)文件中进行大量粗体读取时,我犯了一个错误在这种情况下,我应该使用不同的标题样式

我需要替换:

**some heading**

具有:

some heading
............

我想使用VS Code片段来做到这一点,在其中我突出显示有问题的文本,然后运行该片段进行替换。

为此,我认为我需要进行两次替换:

  1. 获取所选文本,删除开头和结尾的**
  2. 取1的结果,然后将所有(。)替换为文字点(。):s/././g

我不知道如何在VS Code片段中进行嵌套替换-甚至有可能吗?

这就是我现在拥有的:

    "BoldToSubheading": {
        "prefix": ["boldtosubheading"],"body": [
            "${TM_SELECTED_TEXT/\\*\\*(.*)\\*\\*/${1}/}","${TM_SELECTED_TEXT/././g}",],"description": "Change bold text into subheading."
    }

如果输入的文本是:

**foobar**

我得到四个点太多-因为最后一个替换中包含星号。

foobar
..........
代码代码似乎基于的

Textmate docs表示:

For nested replacements,use named captures as variables are inherited.

但是,我试过"${TM_SELECTED_TEXT/(?<guts>.*)/${guts}/g}"并没有运气。

是否有解决我的替换问题的建议?片段是否可以嵌套替换?

要求是:

  1. 突出显示的文本在正面和背面都将包含双星号
  2. 双星号之间的文本(我们称其为'guts')可以包含任何内容-空格,数字,引号等
  3. 结果应为“胆量”,加上换行符,再加上等于胆量长度的点数。

解决方法

我认为只用一个代码片段可能会更容易-也许有条件的替换-但我无法在合理的时间内弄清楚。但这很容易做到。

使用multi-command之类的宏扩展名,将其放入您的设置:

uploadFile($event) {
  if ($event.target.files && $event.target.files[0]) {
    const file = $event.target.files[0];
    const reader = new FileReader();
    reader.readAsDataURL(file)
    reader.onload = (e: any) => {
      this.imageSource = reader.result;
      this.openDialog(this.imageSource); // <-- should be inside the callback
    }
  }
}

和一个用于触发它的键绑定(在keybindings.json中):

"multiCommand.commands": [

  {
    "command": "multiCommand.refactorHeadings","interval": 250,// remove this line and will be instantaneous
    "sequence": [

      {
        "command": "editor.action.insertSnippet","args": {
          "snippet": "${TM_SELECTED_TEXT/\\*\\*(.*)\\*\\*/$1/}",}
      },"editor.action.copyLinesDownAction","cursorLineStartSelect",{
        "command": "editor.action.insertSnippet","args": {
          "snippet": "${TM_SELECTED_TEXT/././g}",}
      } 
    ]
  }
],

refactor headings with a macro

该演示显示选择所有这样的简单查找正则表达式, Ctrl + Shift + L 将执行此操作,并触发宏。出于演示目的,显示速度有所降低。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。