首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VS代码段- Regex多个操作

VS代码段- Regex多个操作
EN

Stack Overflow用户
提问于 2020-01-15 21:20:56
回答 2查看 850关注 0票数 0

一天来,我一直试图让代码片段与regex一起工作,但我似乎无法想出一种方法来实现它。

usecase正在编写LaTeX,特别是带有自动标记的部分。我对标签有一些问题,因为LaTeX不允许标签中的某些丹麦字符。因此,我想让代码片段来处理替换本身,以及一些其他格式。这意味着我要做以下几件事:

  1. 把所有的东西都用小写
  2. 将字母“、”“和”“改为"ae”、"oe“和"aa”
  3. 删除特殊字符(因此字符仅为a-z和0-9)
  4. 将空格改为"_“

最后,我想突出显示“转换”文本,这样如果需要的话,我可以将其更改为不同的文本(在重复标签的情况下)。

这个片段看起来如下所示:

代码语言:javascript
运行
复制
\section{$1} \label{sec:${2:$1(after regex)}

希望这是有意义的

转换将执行以下操作

-> oerne_og_mus!

在Textmate中,这是可以用以下代码片段完成的

代码语言:javascript
运行
复制
\section{${1:section name}}
\label{sec:${2:${1/(\w+)(\W+$)?|\W+/${1:?${1:/asciify/downcase}:_}/g}}}

但这与VS代码不兼容。这能以某种方式被修改来使用VS代码吗?

EN

回答 2

Stack Overflow用户

发布于 2020-01-16 00:48:18

编辑:尝试以下代码片段:

代码语言:javascript
运行
复制
"latex labels": {
  "prefix": "_ll",
  "body": [
      "\\section{$1}",
      "\\label{sec:${2:${1/(\\w*)((æ)|(ø)|(å)|(é)|(\\s+)|([^a-zA-Z0-9_ ]))/${1:/downcase}${3:+ae}${4:+oe}${5:+aa}${6:+e}${7:+_}/gi}}}",
    ],
    "description": "Transform to latex labels"
},

如果您有更多的丹麦语字符,您必须单独添加它们- vscode不支持/asciify转换。

先前的答复:

我真的不认为你能在一次审判中做到。这意味着正常的片段不能工作。不过,宏可以运行任意数量的代码段转换。

使用宏扩展多命令将其放入settings.json中:

代码语言:javascript
运行
复制
  "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}}}"
          }
        }
      ]
    }
  ]

还有一些钥匙绑定:

代码语言:javascript
运行
复制
{
  "key": "alt+d",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.latexLabelTransform" }
},

如果您从文本开始,例如,Ørne og Mus!,请参见下面的演示:

转换后的部分如演示中所示。在触发宏之前,光标位于文本末尾。如果需要的话,我也可以让它从\section {yourTextHere}开始工作。

我试着让它作为一个常规代码片段工作,但它似乎不是一种在单个转换中完成多个转换的方法。

如果这对你有用的话请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2020-01-16 05:03:44

好吧,那么我可能最终找到了一个解决方案,作为一个片段

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

我只发现了几个问题。

  1. 我必须手动将重音字母添加到列表中,例如
  2. 无停机情况
  3. 如果有一个字符串表示"!!",它将被替换为两个下划线,而不是1,因为空格之间有一个间隙。

有人知道该怎么改变吗?或者我甚至可以为这种类型的regex找到一个很好的资源(我还没有找到)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59759720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档