如何用单个JavaScript正则表达式按指定不同长度分割字符串?
用单个正则表达式实现固定长度分段提取
当然可以用单个正则表达式一次性搞定这个分段需求!你只需要把每个固定长度的段都用捕获组包裹起来,让正则一次性匹配并提取所有需要的部分。
正则表达式方案
直接使用这个正则就能精准匹配你要的分段:
^(.{8})(.{14})(.{10})(.{10})(.{4})$
正则解释:
^和$:确保正则匹配整个字符串,避免只匹配到部分内容(.{8}):第一个捕获组,匹配并提取前8个字符(.{14}):第二个捕获组,提取接下来的14个字符(.{10}):第三、第四个捕获组,分别提取两段10字符的内容(.{4}):最后一个捕获组,提取末尾4个字符
代码示例(以JavaScript为例)
const originalStr = "12345678ABCDEFGHIJKLMN2018/05/202018/05/30ABCD"; const segmentRegex = /^(.{8})(.{14})(.{10})(.{10})(.{4})$/; const matchedResult = originalStr.match(segmentRegex); if (matchedResult) { // 捕获组从索引1开始,索引0是整个匹配的完整字符串 const formattedOutput = `${matchedResult[1]} (8 chars) ${matchedResult[2]} (14 chars) ${matchedResult[3]} (10 chars) ${matchedResult[4]} (10 chars) ${matchedResult[5]} (4 chars)`; console.log(formattedOutput); }
运行这段代码会输出你想要的结果:
12345678 (8 chars) ABCDEFGHIJKLMN (14 chars) 2018/05/20 (10 chars) 2018/05/30 (10 chars) ABCD (4 chars)
小提示
如果你的原始字符串可能存在长度不刚好等于46(8+14+10+10+4)的情况,可以根据需求调整正则:
- 如果允许末尾有多余字符:把
$去掉,改成^(.{8})(.{14})(.{10})(.{10})(.{4}) - 如果只需要提取前面的分段,不管后面内容:可以在末尾加
.*,即^(.{8})(.{14})(.{10})(.{10})(.{4}).*$
内容的提问来源于stack exchange,提问作者marchello
相关产品推荐
相关产品推荐

