ES6 / JS:用条件链替换 delve 的正则表达式
ES6 / JS: Regex for replacing delve with conditional chaining
如何在 vs code 项目中用条件链替换 delve?
例如
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
想要的结果
seo?.meta
item?.image.data.attributes.alternativeText
是否可以在 Visual Studio 代码中使用 find/replace?
我提出以下正则表达式:
delve\(\s*([^,]+?)\s*,\s*['"]([^.]+?)['"]\s*\)
和以下替换格式字符串:
?.
解释:匹配 delve(
,第一个参数直到第一个逗号(惰性匹配),然后是第二个字符串参数(没有注意确保括号匹配,因为这相当快' n'dirty anyways),然后是调用的右括号 )
。考虑了合理位置的间距。
这将适用于像 delve(someVar, "key"
) 这样的简单案例,但可能无法用于病理案例;总是手动检查替换。
请注意,这显然无法处理 delve(var, "a.b.c"
),因为据我所知,VSC 格式字符串不支持给定字符串“加入”可变数量的捕获。作为一种解决方法,您可以显式创建具有两个、三个、四个、五个...点的版本并编写相应的替换。例如,两个点的版本如下所示:
delve\(([^,]+?)\s*,\s*['"]([^.]+?)\.([^.]+?)['"]\s*\)
格式字符串为?.?.
.
你写:
e.g.
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
desired result
seo?.meta
item?.image.data.attributes.alternativeText
但我非常怀疑这是故意的,因为 delve(item, "image.data.attributes.alternativeText")
实际上等同于 item?.image?.data?.attributes?.alternativeText
而不是您描述的期望结果。要使其以这种方式处理,只需将 [^.]
替换为 .
即可使其接受包含任何字符(包括点)的字符串。
如何在 vs code 项目中用条件链替换 delve?
例如
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
想要的结果
seo?.meta
item?.image.data.attributes.alternativeText
是否可以在 Visual Studio 代码中使用 find/replace?
我提出以下正则表达式:
delve\(\s*([^,]+?)\s*,\s*['"]([^.]+?)['"]\s*\)
和以下替换格式字符串:
?.
解释:匹配 delve(
,第一个参数直到第一个逗号(惰性匹配),然后是第二个字符串参数(没有注意确保括号匹配,因为这相当快' n'dirty anyways),然后是调用的右括号 )
。考虑了合理位置的间距。
这将适用于像 delve(someVar, "key"
) 这样的简单案例,但可能无法用于病理案例;总是手动检查替换。
请注意,这显然无法处理 delve(var, "a.b.c"
),因为据我所知,VSC 格式字符串不支持给定字符串“加入”可变数量的捕获。作为一种解决方法,您可以显式创建具有两个、三个、四个、五个...点的版本并编写相应的替换。例如,两个点的版本如下所示:
delve\(([^,]+?)\s*,\s*['"]([^.]+?)\.([^.]+?)['"]\s*\)
格式字符串为?.?.
.
你写:
e.g.
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
desired result
seo?.meta
item?.image.data.attributes.alternativeText
但我非常怀疑这是故意的,因为 delve(item, "image.data.attributes.alternativeText")
实际上等同于 item?.image?.data?.attributes?.alternativeText
而不是您描述的期望结果。要使其以这种方式处理,只需将 [^.]
替换为 .
即可使其接受包含任何字符(包括点)的字符串。