【问题标题】:Regex convert to uppercase in VSVim正则表达式在 VSVim 中转换为大写
【发布时间】:2020-04-02 16:16:14
【问题描述】:

我目前正在使用:s/(-[a-z].*-)([a-z])/$1\U$2/.,但这只是删除了第二个- 之后的字符,而不是将其转换为大写变体?

我有一个 CSS 文件,我有几个条目,形式为, ql-font-timesnewromanql-font-arialql-font-geneva 等 我想将它们转换为ql-font-Timesnewromanql-font-Arialql-font-Geneva 等。

我将 VSVim 与 VSCode 一起使用,我不确定它使用的是哪个版本的 Regex(但我相信它是 Javascript 变体)。

如果我使用 PHP 变体,它可以正常工作。 (https://regex101.com/r/8aZI2m/1)

但如果我使用 Javascript 变体,它只会在结果中添加 Uql-font-Utimesnewroman

在 VSCode 中,它更进一步,只是插入 \U。 (ql-font-\Utimesnewroman)。

如果我将正则表达式更改为看起来更像 :s/(-[a-z].*-)([a-z])/$1/\U$2/.,它会继续删除第二个匹配项,而不是将其转换为大写 (ql-font-imesnewroman)

VSVim / VSCode 是否需要任何特殊语法才能使其正则表达式正确匹配并替换为大写?

【问题讨论】:

  • VSC 使用 Javascript 正则表达式变体,所以没有 \U
  • 该死的,我看了看不同的版本后才知道。我希望它有所不同,因为无论出于何种原因,该网站将/\U 视为\U,但VSC 只会删除匹配项。 javascript 正则表达式是否有大写变体?
  • 你应该使用{1:/upcase} code.visualstudio.com/docs/editor/…
  • 阅读该链接和您的建议后,如果我想将遇到的第一个字母字符转换为大写,我的正则表达式应该看起来像 :s/([a-z])/${1:/upcase}/.,对吗?但是当我使用它时,它所做的只是用${1: 替换第一个字母字符。我错过了什么吗?

标签: regex visual-studio-code vscode-snippets vsvim


【解决方案1】:

vscode v1.47 正在增加对查找/替换大小写修饰符的支持,例如 \u 等。请参阅 https://stackoverflow.com/a/62270300/836330

在您的情况下,您可以使用它作为替换:

 $1\u$2   // \u as you are only capitalizing a single letter

[我不熟悉 VSVIM,请告诉我们s/(-[a-z].*-)([a-z])/$1\u$2/. 是否适合您。]


旧答案:

在 keybindings.json 中尝试这个键绑定,它会插入一个 sn-p 以便您可以使用转换:

 {
    "key": "alt+b",              // whatever keybinding you wish
    "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "${TM_SELECTED_TEXT/-font-(\\w+)/-font-${1:/capitalize}/g}""
    },
  },

你先选择你的文字,然后触发sn-p。

这将适用于:

ql-font-timesnewroman
// unrelated text here can be selected to and it will be unaffected.**
ql-font-arial

ql-font-timesnewroman, ql-font-arial, ql-font-geneva  // all in one line

如果您的选择包含不相关的文本,它将保持不变,除非它与 sn-p 使用的 -font-(\\w+) 正则表达式匹配 - 这似乎不太可能。

如果您在一个文件中有很多这些,并且您不喜欢选择整个文件并应用此转换,则首先使用 -font-(\w+) 正则表达式查找(注意无需在查找中双重转义 \w小部件,但您必须在 sn-p 中使用 \\w!)并且 Alt+Enter 将选择所有匹配项,然后您可以触发 sn-p。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 2019-05-15
    • 2018-12-23
    • 2013-07-24
    • 1970-01-01
    • 2011-07-21
    • 2012-11-14
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多