如何使用正则表达式从 vscode 用户片段中的 TM_FILEPATH 返回目录?

问题描述

我正在寻找一种方法来创建用户代码片段以从项目中获取核心目录。这是我正在使用的示例路径:

C:dev/Pseudope/Unreal/Cubicle/Source/CubicleCore/Private

创建 vscode 片段时,${TM_FILEPATH} 将返回此路径以与正则表达式一起使用。我希望能够将这些片段用于不同的项目,这些项目都具有与上述文件路径相同的结构,其中我想应用于片段的文本将始终嵌套在 Source 和 Private|Public 之间。这是我到目前为止的正则表达式:

(?<=Source\\)(.*)(?=\\Private|Public)

根据 https://regexr.com/,此表达式将针对值“CubicleCore”并将其分组到组 1。不幸的是,浏览器中的正则表达式与 vscode 如何解释它之间似乎存在脱节,因为我得到的结果是:

UE_LOG(Log${TM_FILEPATH/(?<=Source\)(.*)(?=\Private|Public)/},Log,TEXT("Hello");

什么时候应该:

UE_LOG(LogCubicleCore,TEXT("Hello");

任何帮助/方向将不胜感激。

解决方法

你可以使用

"UE_LOG(Log${TM_FILEPATH/.*Source[\\\\\\/]([^\\\\/]+)[\\\\\\/](?:Private|Public).*/$1/},Log,TEXT(\"Hello\")"

参见regex demo

详情

  • .* - 尽可能多的零个或多个字符
  • Source - Source
  • [\\\/] - /\
  • ([^\\\/]+) - 第 1 组 ($1):除 \/ 之外的任何一个或多个字符
  • [\\\/] - /\ 字符
  • (?:Private|Public) - PrivatePublic 字符串
  • .* - 尽可能多的零个或多个字符。