Regex转换在vscode中没有被引号包围的连字符对象id键



我已经有了导入的数据,但对象的主id键没有被引号包围,所以不是有效的javascript。

下面是我的一些数据样本:


8ae3fcef-d1f5-43e4-9df0-b1861117c2f2: {
id: "8ae3fcef-d1f5-43e4-9df0-b1861117c2f2",
randomNumber: null,
openSearchId: null,
facilityId: "dd4bf527-d395-40df-a079-6ed9c73272d9",
spaceId: "9672350c-8b0e-4a99-a836-16a8f1e11667",
bucket: "ist1-tenant-1af9e2a9-41c8-45c4-9d0d-fe25a1d9b988",
key: "8ae3fcef-d1f5-43e4-9df0-b1861117c2f2/7ae3fcef-d1f5-43e4-9df0-b1861117c2f2_1662040410090952011.jpeg"
},
8dc3d....... etc

我想我需要做的是瞄准一些东西:

  • 36个字符长
  • 包含数字、字母和连字符
  • 不以引号开头或结尾
  • 后面有冒号。

我想在vscode中使用查找和替换来定位和替换我需要的内容。

我试着检查第一个字符不是"所有36个字符都是字母、数字或连字符。到目前为止,我最接近的是这个(它看起来像是检查第一个字母,然后是下面的字母,所以我不得不输入35,以便它不会完全中断):

[^" ][A-Za-z0-9-]{35}

然而,这也给了我所有被"&quot包围的值(和其他不相关的值)。我也检查了各种其他线程,但我不能弄清楚,有人能提供任何指导吗?

感谢

如果lookbehind断言对您有效,您可以让它更具体一点,至少匹配最小数量的连字符。

(?<!S)(?=[a-f0-9-]{36}:)[a-f0-9]+(?:-[a-f0-9]+){2,}

  • (?<!S)在左侧断言一个空白边界
  • (?=[a-f0-9-]{36}:)断言36个字符a-f 0-9 -后面跟着冒号
  • [a-f0-9]+(?:-[a-f0-9]+){2,}匹配至少一定量的连字符,如2,3…

在替换使用中可以使用双引号包围的完整匹配:

"$0"

查看regex演示。

假设您的id字符串位于行首,您可以使用以下正则表达式搜索:

^([A-Za-z0-9-]{36}):

"$1":

我不熟悉vscode,你可能需要调整引用捕获组1的$1

最新更新