
本文介绍使用正则表达式或循环方法将字符串按固定长度(如每4个字符)精准切分为数组,适用于分组处理、格式化显示或批量解析等场景。
本文介绍使用正则表达式或循环方法将字符串按固定长度(如每4个字符)精准切分为数组,适用于分组处理、格式化显示或批量解析等场景。
在 JavaScript 中,将字符串按固定长度(例如每 4 个字符)分割为子串数组,是常见但需注意边界处理的操作。最简洁高效的方式是使用正则表达式配合 String.prototype.match() 方法:
const list = "abcdefghijklmnop";
const parts = list.match(/.{1,4}/g) || [];
console.log(parts); // ["abcd", "efgh", "ijkl", "mnop"]
该正则 /.{1,4}/g 含义如下:
-
.匹配任意单个字符(除换行符外); -
{1,4}表示匹配 1 到 4 个字符; -
g标志确保全局匹配,返回所有符合条件的子串; -
|| []是防御性写法——当输入为空字符串或null/undefined时,match()返回null,此处避免报错。
⚠️ 注意事项:
- 若字符串长度不能被 4 整除(如
"abcde"),正则/.{1,4}/g仍能正确捕获末尾剩余字符(["abcd", "e"]),无需额外逻辑; - 不推荐仅用
substring()手动循环却未更新索引(如忘记i += 4),易导致无限循环或截断; -
slice()配合for循环亦可实现,但代码更冗长:
const partsByLoop = [];
for (let i = 0; i <p>总结:正则方案简短、健壮、语义清晰,是处理等长分块的首选;若需兼容老旧环境(如不支持 <code>match()</code> 返回数组的 IE),再考虑循环+<code>slice()</code> 的降级方案。实际开发中,建议封装为可复用函数:</p><pre class="brush:php;toolbar:false;">const chunkString = (str, size = 4) => str.match(new RegExp(`.{1,${size}}`, 'g')) || [];
console.log(chunkString("hello world!", 3)); // ["hel", "lo ", "wor", "ld!"]










