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

如何用正则匹配引号内除特定$(...)宏模式外的内容?

匹配引号内非宏内容的正则实现方案

核心思路

要实现只匹配双引号里除$(...)宏之外的内容(包括引号本身),可以用正则的负向预查避开宏的起始标记,同时锁定双引号的范围,精准提取需要高亮的普通文本部分。

基础版正则(无嵌套括号宏)

如果你的宏是简单非嵌套结构(比如$(bar)),用这个正则就够了:

"[^$"]*(?:(?!\$\()[^$"])*"

拆解释义

  • ":精准匹配字符串的起始双引号
  • [^$"]*:先匹配一段既不是$也不是双引号的普通文本(覆盖宏出现前的内容)
  • (?:(?!\$\()[^$"])*:非捕获分组,确保当前位置不是$(的开头,再继续匹配普通文本(覆盖宏出现后的内容)
  • ":匹配字符串的结束双引号

进阶版正则(支持嵌套括号宏)

如果宏里允许嵌套括号(比如$(foo(bar))),就得用递归匹配处理嵌套结构,避免误截断:

"[^$"]*(?:(?!\$\()[^$"]|(\$(?:[^()]|(?1))*\)))*"

这个版本能正确识别嵌套的括号,不会把$(foo(bar))拆成两个宏。

实际测试效果

拿你给出的例子验证:

  • 输入"This is a $(macro)" → 匹配到"This is a "和"
  • 输入"$(macro)This is also a macro literal" → 匹配到"和"This is also a macro literal"
  • 输入无宏的字符串"This is a literal..." → 匹配整个字符串
  • 输入全是宏的"$(only macro here)" → 匹配到开头和结尾的"
  • 输入SPRINTF("$(Vendor)") → 匹配到"和"

语法高亮使用建议

在工具里分两步配置:

  1. 用上面的正则匹配普通字符串内容,设置一种高亮颜色
  2. 再用\$\((?:[^()]|(?1))*\)单独匹配宏内容,设置另一种颜色
    两者配合就能实现类似JS模板字符串的区分高亮效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:35:19