[英]ES6 / JS: Regex for replacing delve with conditional chaining
我提出以下正则表达式:
delve\(\s*([^,]+?)\s*,\s*['"]([^.]+?)['"]\s*\)
以及以下替换格式字符串:
$1?.$2
说明:匹配delve(
,第一个参数直到第一个逗号(惰性匹配),然后是第二个字符串参数(不注意确保括号匹配,因为这无论如何都是相当快的'n'dirty),然后调用的右括号)
。 考虑到合理位置的间距。
这将适用于像delve(someVar, "key"
) 这样的简单案例,但对于病理案例可能会失败; 始终手动检查替换。
请注意,这明确地无法处理delve(var, "abc"
) 因为据我所知,VSC 格式字符串不支持给定字符串“加入”可变数量的捕获。 作为一种解决方法,您可以显式创建具有两个、三个、四个、五个...点的版本并编写相应的替换。 例如,两个点的版本如下所示:
delve\(([^,]+?)\s*,\s*['"]([^.]+?)\.([^.]+?)['"]\s*\)
格式字符串是$1?.$2?.$3
。
你写:
例如
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
期望的结果seo?.meta
item?.image.data.attributes.alternativeText
但我高度怀疑这是有意为之,因为delve(item, "image.data.attributes.alternativeText")
实际上等同于item?.image?.data?.attributes?.alternativeText
而不是您描述的预期结果。 要使其以这种方式处理,只需将[^.]
替换为.
使其接受包含任何字符(包括点)的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.