正则负前瞻+捕获组:如何匹配JavaScript顶层对象属性
匹配JavaScript顶层
this属性的正则表达式 要只捕获this的顶层属性(比如this.nodeName),同时排除嵌套属性(比如this.nodeName.length),你可以直接用这个正则:
(this\.\w+)(?!\.)
关于你之前的困惑解释:
你觉得负前瞻只作用于\w+部分,其实是对正则断言的作用位置理解有误:
(?!\.)是位置断言,它不匹配任何字符,只检查当前匹配结束的位置后面有没有.。在(this\.\w+)(?!\.)里,这个断言是在整个this.xxx匹配完成后才触发的——也就是说,只要this.xxx后面紧跟着的不是.,就会被匹配,这正好排除了嵌套属性的情况(比如this.nodeName.length里,this.nodeName后面是.,断言失败,自然不会被匹配)。- 至于
this(?!\.)在this.里不匹配thi的问题:正则匹配this是固定的四个字符,匹配完成后才会检查后面有没有.。当遇到this.时,this后面是.,断言失败,整个匹配直接失败,不会回溯去匹配thi——因为this是固定字面量,没有备选的短匹配逻辑,所以不会出现只匹配thi的情况。
如果需要更严格匹配合法标识符(比如避免意外匹配到数字结尾的非属性名),也可以调整成带单词边界的版本:
\bthis\.(\w+)\b(?!\.)
内容的提问来源于stack exchange,提问作者Luke T O'Brien
相关产品推荐
相关产品推荐

