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

如何用正则表达式按指定分段长度切割连续字符串

按指定长度序列分割字符串的正则实现方案

原正则失效原因

你之前编写的\b\w{1,74}\w{1,64}\w{1,22}\w{1,10}\w{1,94}\w{1,40}\w{1,80}\w{1,40}\w{1,20}\b无法生效有两个核心原因:

  • 所有长度量词连续拼接,正则会把所有规则叠加匹配一整段连续字符串,无法拆分出对应长度的独立分段
  • \b单词边界在十六进制字符串开头的0x位置匹配逻辑不符合预期,会截断正常匹配

实现方案

固定长度序列场景

如果你的分割长度是固定的,可以直接编写带捕获组的正则,执行match后取出捕获组结果即可:

const str = '0x60c980600b6000396000f360208060008037602181600080600261fffff136602014167faf92e7b2c77d83eaf65cbf5ab7415c4eddfd900eab716dcd6c43d5cd998c32a6602151141660505736156400611cfbfc421116608d57fe5b7f8c1d64e3bd87387709175b9ef4e7a1d7a8364559fc0e2ad9d77953909a0d1eb360206000a173578c86b36a7694d4eafc88c4ac8efb369b5317a8ff5b7f5d26862916391bf49478b2f5103b0720a842b45ef145a268f2cd1fb2aed55178600080a1739a54cb6a479023658cea01425e8035e4df93f925ff';

// 按你的分段长度要求编写正则,每个捕获组对应一段固定长度
const splitReg = /^(.{74})(.{64})(.{22})(.{10})(.{94})(.{40})(.{80})(.{40})(.{20})$/;
const splitResult = str.match(splitReg).slice(1);

// 输出分段后的数组
console.log(splitResult);

动态长度序列场景

如果分割长度需要经常调整,可以动态生成正则,避免手动拼接的麻烦:

const str = '0x60c980600b6000396000f360208060008037602181600080600261fffff136602014167faf92e7b2c77d83eaf65cbf5ab7415c4eddfd900eab716dcd6c43d5cd998c32a6602151141660505736156400611cfbfc421116608d57fe5b7f8c1d64e3bd87387709175b9ef4e7a1d7a8364559fc0e2ad9d77953909a0d1eb360206000a173578c86b36a7694d4eafc88c4ac8efb369b5317a8ff5b7f5d26862916391bf49478b2f5103b0720a842b45ef145a268f2cd1fb2aed55178600080a1739a54cb6a479023658cea01425e8035e4df93f925ff';

// 自定义分割长度序列
const splitLengths = [74, 64, 22, 10, 94, 40, 80, 40, 20];
// 动态生成正则
const dynamicReg = new RegExp(splitLengths.map(len => `(.{${len}})`).join(''));
const splitResult = str.match(dynamicReg).slice(1);

console.log(splitResult);

注意事项

  • 请确保原字符串总长度等于所有分割长度的总和,否则匹配会失败。如果需要兼容长度不足/有冗余的场景,可以在正则最后追加(.*)捕获剩余内容。
  • 如果字符串中包含换行符,需要给正则加s单行标志,让.可以匹配换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:54:02