代码之家  ›  专栏  ›  技术社区  ›  wrymug

使用regex在javascript源代码中查找深度嵌套的对象

  •  1
  • wrymug  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前
        1
  •  1
  •   Sebastian Proske    7 年前

    看来你可以利用这里的反向引用

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

    为了匹配如你的样本中所示的3个元素的序列,其中第一个元素是一个点分离的单词序列,第二个元素是第一个元素+ DOT+另一个单词,第三个是第二个元素+ DOT+另一个单词。

    这将只匹配前3个元素,如果你有4个或更多的链,但是如果你计划用手做替换,这不应该是一个拦截器。

    在行动中看到它 here