我目前正在重构我的代码库以替换如下代码:
one && one.two && one.two.three
使用optional chaining等效:
one?.two?.three
但是我很难找到一个匹配前者实例的正则表达式。
到目前为止,我已经提出了this:
(([a-zA-Z0-9]*\.)*[a-zA-Z0-9]* && )+
可以,但是有很多假阳性(匹配a && a.c && a.d.e && a.f.g.h
之类的东西)
正则表达式应匹配以下形式的表达式(任意长度):
one && one.two && one.two.three...
one.two && one.two.three && one.two.three.four...
但不匹配:
one && two...
one && two.three...
非常感谢您的帮助!
答案 0 :(得分:1)
似乎您可以在此处使用反向引用并使用
(\b\w+(?:\.\w+)*)\s*&&\s*(\1\.\w+)\s*&&\s*\2\.\w+
可以匹配示例中显示的3个元素的序列,其中第一个元素是点分隔单词的序列,第二个元素是第一个元素+点+另一个单词,第三个元素是第二个元素+点+另一个单词
仅当您具有4个或更多的链时,这才匹配前3个元素,但是如果您打算手工进行替换,则这不应成为障碍。
查看实际情况here