如何编写正则匹配双大括号内容,排除href属性双引号内的同类内容
正则匹配方案
最终可用正则(兼容支持可变长度后视断言的引擎:Python 3.10+、现代JavaScript、Java 9+等)
(?<!href="[^"]*){{.*?}}
原理解释
- 否定后视断言
(?<!href="[^"]*):确保当前匹配位置的前方,不存在href="前缀加任意非双引号字符的组合,从逻辑上排除了所有位于href="和闭合双引号之间的内容区间 {{.*?}}:非贪婪匹配所有双大括号包裹的内容(包含大括号本身),避免跨多个大括号对匹配
针对你提供的测试文本,该正则匹配结果为{{ voluptas }}、{{ dolore }}、{{smart}},完全符合排除href属性内双大括号内容的需求。
原有错误写法问题说明
你之前尝试的[^"](?={{)(.*?)}}[^"]仅要求大括号前后紧邻位置不是双引号,无法应对href="{{ item }} something elese"这类场景:该场景下}}后紧邻的是空格而非双引号,还是会被错误匹配,没有从整体上判断是否处于href属性的引号区间内。
低版本引擎兼容方案
如果使用的正则引擎不支持可变长度后视断言,可采用两步处理逻辑:
- 先替换所有
href=".*?"匹配到的内容为空 - 再用
{{.*?}}匹配剩余文本中的目标内容
内容的提问来源于stack exchange,提问作者alias51
相关产品推荐
相关产品推荐

