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

如何让JavaScript正则表达式返回字符串所有内容作为匹配项

如何让JavaScript正则返回字符串所有内容(含普通文本和目标匹配片段)

你当前的正则仅匹配带*、_或[]的特殊片段,想要同时返回这些片段之间的普通文本,需要调整正则逻辑,让它同时匹配特殊模式和普通内容。

解决方案

修改正则,同时匹配你的目标特殊模式,以及这些模式之间(包括开头/结尾)的普通文本。关键是使用非贪婪匹配和正向预查来精准截取普通内容,避免过度匹配。

调整后的正则

/(?:\[\d+\]|\*.*?\*|_.*?_)|([\s\S]+?)(?=\[\d+\]|\*.*?\*|_.*?_|$)/gu

正则解析

  • (?:\[\d+\]|\*.*?\*|_.*?_):非捕获分组,匹配你定义的三种特殊格式(数字括号、星号包裹文本、下划线包裹文本),直接作为完整匹配项返回。
  • |:逻辑或,匹配特殊模式或普通文本。
  • ([\s\S]+?):非贪婪匹配任意字符([\s\S]包含换行符),确保只截取到下一个特殊模式前的内容。
  • (?=\[\d+\]|\*.*?\*|_.*?_|$):正向预查,标记普通文本的结束位置——下一个特殊模式或字符串末尾。

代码示例

const testStr = '*This* is a test.[15] I would like[16] To figure _out how_ to do this.[20]';
const regex = /(?:\[\d+\]|\*.*?\*|_.*?_)|([\s\S]+?)(?=\[\d+\]|\*.*?\*|_.*?_|$)/gu;
const allMatches = Array.from(testStr.matchAll(regex), match => match[0]);

console.log(allMatches);

输出结果

[
  "*This*",
  " is a test.",
  "[15]",
  " I would like",
  "[16]",
  " To figure ",
  "_out how_",
  " to do this.",
  "[20]"
]

注意:原正则中的.*是贪婪匹配,若字符串中有多个同类型特殊片段(比如两个*xxx*)会错误地从第一个*匹配到最后一个*,改为.*?非贪婪匹配即可避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:01:32