正则表达式问题:如何匹配目标名称对应的最近Shape ID?
解决正则匹配最近Shape ID的问题
问题原因
你当前的正则id:\s+"Shape\.([^"]+)",[\S\s]*?name: "Triangle"之所以匹配到Square的ID,是因为[\S\s]*?会从第一个id:开始,无差别匹配任意字符(包括换行),直到找到第一个name: "Triangle"——它会跨越两个Shape对象的边界,自然就拿到了最靠前的ID。
修正后的正则
id:\s+"Shape\.([^"]+)",(?:(?!id:)[\S\s])*?name: "Triangle"
关键改进点
- 把原来的
[\S\s]*?替换成(?:(?!id:)[\S\s])*?:(?!id:)是负向前瞻断言,表示当前位置后面不能紧跟id:;[\S\s]匹配任意字符(包括换行);- 整个
(?:(?!id:)[\S\s])*?的作用是:在匹配过程中,一旦遇到下一个id:就停止,确保只在当前Shape对象的范围内匹配,不会跨越到前一个Shape中。这样就能精准锁定Triangle所属的最近ID。
内容的提问来源于stack exchange,提问作者JimmyJS
相关产品推荐
相关产品推荐

