无法将两个正则表达式合并为一个代码片段以在 VSCode 中使用

Cannot join two regex into one to produce a code snippet to use in VSCode

我正在努力学习正则表达式以及如何在 VSCode 的片段中使用它们,我真的需要一些帮助(我是该领域的初学者)。 我有两个正则表达式:

我想将它们组合成一个正则表达式,用于 VSCode 中的用户代码片段 (html)。

来自以下输入:C:\folder0\myhtml.html 我想使用转换从代码片段中获得以下输出:C:/folder0/myhtml(反斜杠替换为正反斜杠并删除扩展名)。

我知道如何编写独立完成的片段:

${TM_FILEPATH/(.*)\..+$//} 会产生 C:\folder0\myhtml

${TM_FILEPATH/(\\)/\//g} 会产生 C:/folder0/myhtml.html

TM_FILEPATH 在我的示例中是 C:\folder0\myhtml.html。但我无法将它们组合起来。

我首先尝试像这样在 https://regex101.com/ 中组合正则表达式: (\)(.*)\.[^.]+$ 但结果不是我所期望的。

使用

${TM_FILEPATH/\\([^\\.]*)(?:\..*)?/\//}

参见regex proof

解释

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  \                       '\'
--------------------------------------------------------------------------------
  (                        group and capture to :
--------------------------------------------------------------------------------
    [^\.]*                  any character except: '\', '.' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of 
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (optional
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    \.                       '.'
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
  )?                       end of grouping

对于您的情况,您可以通过使用其他变量(参见 snippet variables documentation)使其变得更加简单。

"${TM_DIRECTORY/(\\)/\//g}/$TM_FILENAME_BASE"

TM_DIRECTORY 获取到文件名的完整路径。 C:\folder0 在你的例子中。
$TM_FILENAME_BASE 获取不带扩展名的文件名。 myhtml 在你的例子中。

因此,您真正需要做的就是通过转换将这些反斜杠与正斜杠交换:${TM_DIRECTORY/(\\)/\//g} 并连接这些部分。