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

如何构建多行正则表达式捕获未调用.appFont的Text声明?

多行正则匹配未添加.appFont的Text声明

需求明确

需要构建正则满足:

  • 匹配以Text(开头的代码片段
  • 该片段在遇到下一个}(函数结束)或另一个Text(之前,完全不包含.appFont(调用

现有正则的问题分析

  1. 第一个正则Text\([\s\S]*?\)[\s\S]*?(?!\.appFont):
    这里的负向预查是零宽断言,只会匹配到.appFont出现前的内容,无法实现“存在.appFont则整个匹配失败”的要求。
  2. 第二个正则Text\([\s\S]*?\)[\s]*?(?!appFont)[\s\S]\}:
    逻辑结构混乱,[\s]*?(?!appFont)仅检查当前位置后无appFont,但后续的[\s\S]\}会强制匹配任意字符加},完全忽略了.appFont的存在。

正确正则方案

Text\([\s\S]*?\)(?:(?!\.appFont|Text\(|})[\s\S])*\}

正则逻辑拆解

  1. Text\([\s\S]*?\):匹配完整的Text(...)声明,支持多行写法(比如Text(后换行写字符串)
  2. (?:(?!\.appFont|Text\(|})[\s\S])*:核心的负向预查循环
    • (?!\.appFont|Text\(|}):每次匹配任意字符前,先断言当前位置后不会出现.appFont、新的Text(或结束符}
    • [\s\S]:匹配任意字符(包括换行)
    • 整个循环确保从Text(...)结束后,到}或新Text(之前,全程没有.appFont
  3. \}:匹配函数结束的},锁定匹配范围

示例验证

针对你提供的代码片段:

// 情况1:包含.appFont,不匹配
Text("blah") 
  .appFont(.body)
}

// 情况2:无.appFont,会被匹配
Text("blah") 
}

// 情况3:包含.appFont,不匹配
Text(
  "blah"
)
.appFont(.blah)
}

只有第二种情况会被正则成功捕获,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:15:02