使用正则表达式在Javascript源代码中查找深层嵌套的对象

时间:2018-06-21 19:04:51

标签: regex refactoring

我目前正在重构我的代码库以替换如下代码:

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...

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

似乎您可以在此处使用反向引用并使用

(\b\w+(?:\.\w+)*)\s*&&\s*(\1\.\w+)\s*&&\s*\2\.\w+

可以匹配示例中显示的3个元素的序列,其中第一个元素是点分隔单词的序列,第二个元素是第一个元素+点+另一个单词,第三个元素是第二个元素+点+另一个单词

仅当您具有4个或更多的链时,这才匹配前3个元素,但是如果您打算手工进行替换,则这不应成为障碍。

查看实际情况here