如何编写正则检测Object()链式调用中是否调用了modifierD
链式调用缺失指定修饰符的正则检测方案
可以通过正则实现,你的现有正则问题在于负向预查的作用范围仅覆盖了Object()后的首个调用项,没有对整个链式调用的所有内容做校验,因此出现非首项调用modifierD时的误判。
适配需求的正则写法
需要搭配m(多行匹配)修饰符使用:
^\s*Object\(\)(?:(?!\.modifierD\(\))[\s\S])+$
如果你的正则引擎支持s(单行模式,让.匹配换行符),也可以简化写为:
^\s*Object\(\)(?:(?!\.modifierD\()).+$
正则逻辑说明
^\s*Object\(\):匹配带任意前置缩进、以Object()开头的链式调用起始行(?:(?!\.modifierD\(\))[\s\S])+:非捕获组,每匹配一个字符前都会校验后续位置是否存在.modifierD(),只要存在就终止匹配,确保整个链式调用块内没有目标修饰符才会完全匹配$:匹配到链式调用块的结束位置
匹配效果验证
- 会命中匹配(需要触发linter警告,缺失
modifierD)的代码:
Object() .modifierA() .modifierB() .modifierC()
- 不会命中匹配(存在
modifierD,无需警告)的代码,不管modifierD在链式调用的任意位置都生效:
Object() .modifierA() .modifierD() .modifierC()
内容的提问来源于stack exchange,提问作者villb
相关产品推荐
相关产品推荐

