无法将两个正则表达式合并为一个代码片段以在 VSCode 中使用
Cannot join two regex into one to produce a code snippet to use in VSCode
我正在努力学习正则表达式以及如何在 VSCode 的片段中使用它们,我真的需要一些帮助(我是该领域的初学者)。
我有两个正则表达式:
- 第一个是从文件路径中删除扩展名:
(.*)\.[^.]+$
- 第二个将输出文件路径中出现的所有反向斜线:
/(\)/g
我想将它们组合成一个正则表达式,用于 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}
并连接这些部分。
我正在努力学习正则表达式以及如何在 VSCode 的片段中使用它们,我真的需要一些帮助(我是该领域的初学者)。 我有两个正则表达式:
- 第一个是从文件路径中删除扩展名:
(.*)\.[^.]+$
- 第二个将输出文件路径中出现的所有反向斜线:
/(\)/g
我想将它们组合成一个正则表达式,用于 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}
并连接这些部分。