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

正则表达式:匹配以--+TEXT|开头行中不在[]内的文本

解决ScriptCards输出行的非变量文本正则匹配问题

针对你需要高亮ScriptCards中--+TEXT|开头行里,排除[]变量和开头--+、|的文本需求,以下是可行的正则方案和实现思路:

核心正则规则

可以拆分为两个独立的正则,分别匹配标题部分和内容中的非变量文本,覆盖所有需要着色的区域:

1. 匹配--+与|之间的标题文本(如示例中的Move)

(?<=^--\+)([^|]+)(?=\|)
  • (?<=^--\+):正向预查,确保当前位置是行首--+之后
  • ([^|]+):匹配所有非|的字符,即标题内容
  • (?=\|):正向预查,确保后面紧跟|

2. 匹配|之后不在[]内的内容文本(如示例中的Go 、spaces)

(?<=^--\+[^|]+\|)(?:(?!\[|\]).)+|(?<=\])(?:(?!\[|\]).)+
  • 第一部分(?<=^--\+[^|]+\|)(?:(?!\[|\]).)+:匹配|之后到第一个[之前的非变量文本
  • 第二部分(?<=\])(?:(?!\[|\]).)+:匹配]之后到下一个[或行尾的非变量文本
  • (?:(?!\[|\]).)+:负向预查,确保当前字符不是[或],匹配连续的非变量字符

在Sublime自定义语法中的配置示例

在你的.sublime-syntax文件中,可以这样配置规则:

contexts:
  main:
    - match: ^--\+
      scope: punctuation.definition.scriptcards.output.start
      push: scriptcards-output-line
  scriptcards-output-line:
    - match: (?<=^--\+)([^|]+)(?=\|)
      scope: string.title.scriptcards
    - match: (?<=^--\+[^|]+\|)(?:(?!\[|\]).)+|(?<=\])(?:(?!\[|\]).)+
      scope: string.content.scriptcards
    - match: \[[$&][^\]]+\]
      scope: variable.scriptcards
    - match: \|
      scope: punctuation.separator.scriptcards
    - match: $
      pop: true

这个配置会:

  • 先匹配行首的--+,进入输出行上下文
  • 高亮标题文本和非变量内容文本
  • 同时把[$Num]这类变量标记为变量作用域,方便区分

对之前尝试的问题修正

你之前的正则存在方向错误:

  1. 第一个正则\[^\]]+(?![^\[]*\])实际是匹配[开头的变量内容,和需求完全相反
  2. 第二个正则的预查部分写法有误,\(?<=多了一个转义符,应该是(?<=
  3. 第三个正则只能匹配标题,但没覆盖内容中的非变量部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:44