Javascript Negative Lookaround匹配非{}内___正则不生效问题
正则匹配问题解答
现有正则错误原因
你编写的/___\s*\n*(?!})/存在两处核心逻辑缺陷,导致无法排除{}包裹内的___:
- 负向先行断言
(?!})仅能校验___后的空白、换行符之后是否直接跟随},仅能排除___ }这类紧邻右大括号的场景,只要___和}之间存在其他内容(例如{ ___ 测试文本 }),断言就会判定为符合条件,命中大括号内的___。 - 没有对
{}的包裹范围做整体校验,无法区分___处于大括号内部还是外部,自然实现不了过滤效果。
正确实现方案(JavaScript环境为例)
推荐使用正则:/___(?![^{]*})/g
匹配逻辑:
- 先匹配文本中所有
___ - 负向先行断言
(?![^{]*})做过滤:从当前匹配到的___位置向后查找,若直到遇到第一个}之前都没有出现{,说明这个___处于{}包裹范围内,直接排除匹配;反之则判定为大括号外的___,保留匹配结果。
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

