You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确结合特殊字符使用正则表达式的*SKIP功能?

问题分析

你的正则核心思路是用(*SKIP)(?!)跳过不符合条件的情况,但存在两个关键问题:

  1. 原正则开头的\b对?和=无效——这两个是非单词字符,无法触发单词边界,导致包含? float或= float的分支根本匹配不到,自然无法跳过。
  2. 去掉\b后,分支里的(?:\s+\w+)*\s+要求必须有空格,无法匹配=float或?float这种无空格的紧连场景,导致这些情况没被跳过,进而被后面的正向预查误匹配。
解决方案

调整正则中排除分支的空白匹配逻辑,允许禁止前缀与类型之间有0个或多个空白字符,同时确保分支能覆盖所有需要排除的场景:

(?:(?:highp|lowp|mediump|return|\?|\=)\s*(?:\w*\s*)*\b(float|(?:i|b)?vec[2-4]|mat[2-4](?:x[2-4])?))(*SKIP)(?!)|(?=\b(float|(?:i|b)?vec[2-4]|mat[2-4](?:x[2-4])?))

关键修改点:

  • 移除开头无效的\b,让?和=能被正常匹配
  • 将(?:\s+\w+)*\s+替换为\s*(?:\w*\s*)*:允许禁止前缀与目标类型之间有0个或多个空白字符,同时兼容前缀后可能出现的其他单词
  • 保留(*SKIP)(?!)逻辑,确保所有匹配到的排除场景被跳过,只匹配剩下的合法类型位置

验证效果:

  • 被排除的场景:? float x;、=float(1.0f)、return vec3;、highp mat4
  • 被匹配的场景:float x;、ivec2 y;、mat3x3 z;

内容的提问来源于stack exchange,提问作者Fox1942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:16:06