如何将连续十六进制字符串分割为每行32个元组的空格分隔块?
格式化十六进制字符串为每行32个带空格的元组
可以通过两种正则替换方式实现需求,以下是具体方案:
方案1:链式正则替换(简洁易读)
先给每两个十六进制字符间添加空格,再按32个元组的长度换行:
const formattedHex = hex .replace(/(.{2})/g, '$1 ') // 为每两个十六进制字符添加空格分隔 .replace(/(.{95})/g, '$1\n') // 每95个字符(对应32个带空格的元组)换行 .trim(); // 移除末尾多余的空格和换行符
方案2:单正则+回调函数(一次replace调用)
通过正则匹配1-32个元组的区块,在回调中完成空格添加和换行:
const formattedHex = hex.replace(/((?:.{2}){1,32})/g, match => { return match.replace(/.{2}/g, '$& ').trim() + '\n'; }).trim();
效果验证
用你提供的示例字符串测试,两种方案都会输出目标格式:
e0 11 02 02 08 09 02 03 00 80 02 02 02 08 09 02 02 08 09 5f 52 0c 80 66 05 44 45 47 2b 44 73 96 21 e0 d0 03 04 04 01 d2 10 44 45 49 46 58 35 32 46 34 47 44 4a 4d 01 00 00 d3 10 44 45 47 2b 44 53 33 37 4f 53 47 4b 32 01 00 00 d4 10 44 45 47 2b 44 53 33 37 47 4b 56 30 33 01 00 00 d5 03 04 04 01 d6 10 44 45 47 2b 44 43 42 32 43 54 47 30 31 01 00 00 d7 10 44 45 47 2b 44 50 44 50 53 5f 5f 5f 5f 01 06 00 90 00
原理说明
- 方案1中:
/.{2}/g全局匹配每两个十六进制字符,替换为匹配内容加空格;/.{95}/g匹配32个元组加31个空格的总长度(32×2 + 31 = 95),替换为匹配内容加换行;最后trim()清理末尾多余的空格和换行。 - 方案2中:
((?:.{2}){1,32})匹配1到32个连续的元组(每个元组2个字符),回调函数内给每个元组添加空格,再拼接换行符,最后整体trim()处理收尾。
内容的提问来源于stack exchange,提问作者philk
相关产品推荐
相关产品推荐

