使用正则表达式分组文本:提取含特殊标记文本的全内容数组
正则拆分文本解决方案
你需要把包含反引号标记的文本拆分为普通文本和标记内文本组成的数组,原正则/(.*)\(.)`(.)/gm`无法满足需求,原因是它会将换行符纳入匹配范围,且仅能处理单组反引号,还会残留多余空白字符。
可以使用以下正则表达式:
/(`[^`]+`|[\s\S]+?)(?=`|$)/g
具体处理步骤(以JavaScript为例)
- 用
match()方法获取所有匹配结果 - 遍历结果,去除每个项首尾的空白(包括换行符)
- 若项以反引号开头,则去掉首尾的反引号
- 过滤掉空字符串
代码示例:
const text = `Some text 1 \`special text\` Some text 2`; const regex = /(`[^`]+`|[\s\S]+?)(?=`|$)/g; const result = text.match(regex) .map(item => { const trimmedItem = item.trim(); return trimmedItem.startsWith('`') ? trimmedItem.slice(1, -1) : trimmedItem; }) .filter(item => item); console.log(result); // 输出: ["Some text 1", "special text", "Some text 2"]
正则规则说明
([`]+`|[\s\S]+?)`:匹配两种内容,一是反引号包裹的文本(`[]+匹配反引号间所有非反引号字符),二是任意字符([\s\S]+?非贪婪匹配,直到遇到下一个反引号或文本结尾)(?=|$)`:正向预查,确保匹配位置后是反引号或文本结尾,避免过度匹配
该正则同样支持多组反引号的场景,比如输入:
Text A `Special 1` Text B `Special 2` Text C
会输出数组:["Text A", "Special 1", "Text B", "Special 2", "Text C"]
内容的提问来源于stack exchange,提问作者Ehsan Hatefi
相关产品推荐
相关产品推荐

