VS代码段-Regex多个操作

问题描述 投票:0回答:2

我已经尝试了一天来使代码片段与正则表达式一起工作,但是我似乎无法将这种想法包扎起来。

用例正在编写LaTeX,特别是带有自动标签的部分。标签方面存在一些问题,因为LaTeX不允许标签中使用某些丹麦字符。因此,我希望代码片段能够处理替换本身以及其他一些格式。这意味着我想要以下内容:

  1. 将所有内容变为小写
  2. 将字母“æ”,“ø”和“å”更改为“ ae”,“ oe”和“ aa”
  3. 删除特殊字符(因此字符仅为a-z和0-9)
  4. 将空格更改为“ _”

最后,我想突出显示“已转换”的文本,因此如果需要,可以将其更改为其他内容(如果标签重复)。

摘要如下所示:

\section{$1} \label{sec:${2:$1(after regex)}

完全没有任何希望的希望

转换将执行以下操作

Ørneog Mus! -> oerne_og_mus

这可以在Textmate中使用以下代码段进行

\section{${1:section name}}
\label{sec:${2:${1/(\w+)(\W+$)?|\W+/${1:?${1:/asciify/downcase}:_}/g}}}

但是这与VS代码不兼容。可以以某种方式更改它以使其与VS代码一起使用吗?

regex visual-studio-code code-snippets
2个回答
0
投票

我真的不认为您可以在一个正则表达式中做到这一点。这意味着正常的代码段将不起作用。宏可以根据需要运行任意数量的代码段转换。

使用宏扩展名multi-command将其放入您的settings.json:

  "multiCommand.commands": [

    {
      "command": "multiCommand.latexLabelTransform",
      "sequence": [
        "cursorHomeSelect",
        "editor.action.clipboardCopyAction",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/(æ)|(ø)|(å)/${1:+ae}${2:+oe}${3:+aa}/gi}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/(.*)/${1:/downcase}/}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "${TM_SELECTED_TEXT/[^a-z0-9 ]//g}"
          }
        },
        "cursorHomeSelect",
        {
          "command": "editor.action.insertSnippet",
          "args": {
              "snippet": "\\section {$CLIPBOARD} \\label{sec:${2:${TM_SELECTED_TEXT/\\s/_/g}}}"
          }
        }
      ]
    }
  ]

以及一些绑定:

{
  "key": "alt+d",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.latexLabelTransform" },
  "editorLangId == latex"  // assuming this is correct
},

[如果以文本开头,例如Ørne og Mus!,请参见以下演示:

latex snippet transform


如演示中所示,已选择转换的部分。在触发宏之前,在文本结尾处使用光标。如果需要,我可能也可以使它以\section {yourTextHere}开头。

我试图让它作为常规代码片段使用,但它似乎并不是一种在单个转换中获得想要完成的多重转换的方法。

让我知道这是否适合您。


0
投票

好,所以我可能最终找到了一个可以作为摘要使用的解决方案

"\\section{$1}",
"\\label{sec:${2:${1/(æ)|(ø)|(å)|(é)|( +)|[^A-Za-z0-9]/${1:+ae}${2:+oe}${3:+aa}${4:+e}${5:+_}/g}}}",

仅发现了几个问题。

  1. 我必须手动将带重音符号的字母添加到列表中,例如é
  2. 无小写
  3. [如果有一个字符串说“ !!”,它将被替换为两个下划线而不是1,因为空格之间有一个分隔符。

任何人都知道如何进行更改?或者,我甚至可以在哪里找到此类正则表达式的良好资源(我一直找不到))

© www.soinside.com 2019 - 2024. All rights reserved.