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

如何使用单个正则表达式匹配不同顺序的子组并提取目标内容

单正则提取特定结构字符串片段

问题描述

现有一类字符串符合以下两种结构之一:

(\w+){1}([!][a-zA-Z0-9>,]+)*([#]\d+)?
(\w+){1}([#]\d+)?([!][a-zA-Z0-9>,]+)*

字符串示例如下:

"Abc1!deF2>Ghi3,4jlmNO!pQr5st#1400"
"Abc1#1400!deF2>Ghi3,4jlmNO!pQr5st"

预期的提取结果按字符串内的出现顺序排列,如下:

["Abc1", "!deF2>Ghi3,4jlmNO", "!pQr5st", "#1400"]
["Abc1", "#1400", "!deF2>Ghi3,4jlmNO", "!pQr5st"]

原实现通过3个正则分别匹配不同段,需要改为单个正则实现同等效果。

实现方案

使用带全局匹配模式的多分支正则即可实现,代码如下:

// 单个正则表达式
const matchReg = /^\w+|![a-zA-Z0-9>,]+|#\d+/g;

// 测试用例1
const str1 = "Abc1!deF2>Ghi3,4jlmNO!pQr5st#1400";
console.log(str1.match(matchReg));
// 输出:["Abc1", "!deF2>Ghi3,4jlmNO", "!pQr5st", "#1400"]

// 测试用例2
const str2 = "Abc1#1400!deF2>Ghi3,4jlmNO!pQr5st";
console.log(str2.match(matchReg));
// 输出:["Abc1", "#1400", "!deF2>Ghi3,4jlmNO", "!pQr5st"]

正则规则说明

  • ^\w+:匹配字符串开头的首个单词段,限制开头位置避免其他位置的独立单词被误捕获
  • ![a-zA-Z0-9>,]+:匹配所有以!开头、后续字符为字母/数字/>/,的功能段
  • #\d+:匹配所有以#开头、后续为纯数字的标记段

全局匹配模式g会从左到右扫描整个字符串,按出现顺序返回所有命中的片段,正好符合预期的输出顺序要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:02