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

JS正则如何匹配:::后内容到三个下划线或文本输入末尾?

问题原因

你当前使用的*属于贪婪匹配符,会尽可能匹配最长的有效内容,所以在存在___的场景下会一直匹配到整个文本末尾的___位置,导致___之后的内容也被纳入第一个分组的匹配结果中。

修正后的正则

const thing = /[^:]:::([\s\S]*?)(?:_{3}|$)/gm

修改说明

  • 将[\s\S]*替换为[\s\S]*?,新增的?将贪婪匹配切换为非贪婪匹配,会尽可能匹配最短的内容,一旦扫描到___就立刻终止匹配,不会继续向后读取内容。
  • 将原有的第二个分组改为非捕获分组(?:_{3}|$),不会占用分组序号、也不会生成多余的匹配结果,同时保留了避免无限循环的作用。

效果验证

  • 存在___的场景:输入xxx:::需要匹配的内容___不需要的内容,第一个分组的匹配结果为需要匹配的内容,符合预期。
  • 无___的场景:会自动匹配到文本末尾,和原有逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:39:00