在 JavaScript 中每 N 个字符拆分一个字符串
Split String into Substrings of N characters in JavaScript
要每隔 N 个字符拆分一个字符串,请对match()
字符串调用该方法,将以下正则表达式传递给它/.{1, N}g/
。
该match
方法将返回一个包含长度为 N 个字符的子字符串的数组。
const str = 'bobbyhadzabc'; const result = str.match(/.{1,4}/g) || []; // 👇️ [ 'bobb', 'yhad', 'zabc' ] console.log(result);
String.match方法将字符串与正则表达式进行匹配。
该方法返回一个包含匹配项(如果有)或未null
找到匹配项的数组。
正斜杠标记/ /
正则表达式的开始和结束。
点.
特殊字符匹配任何单个字符。
花括号{min, max}
至少匹配前min
一项的字符,最多匹配max
前一项的字符。
在示例中,.{1,4}
匹配字符串的 1 到 4 个字符。
const str = 'bobbyhadzabc'; const result = str.match(/.{1,4}/g) || []; // 👇️ [ 'bobb', 'yhad', 'zabc' ] console.log(result);
我们使用了g
(global) 标志,因为我们想要匹配字符串中出现的所有正则表达式,而不仅仅是第一次出现的地方。
如果删除g
标志,则只有第一次出现的正则表达式在字符串中匹配。
const str = 'bobbyhadzabc'; const result = str.match(/.{1,4}/) || []; // 👇️ [ 'bobb' ] console.log(result);
如果在字符串中未找到正则表达式,则该match
方法返回null
。
这就是为什么我们使用逻辑或 (||) 运算符来返回一个空数组。
const str = ''; const result = str.match(/.{1,4}/g) || []; // 👇️ [] console.log(result);
如果左边的值为假,则逻辑 OR (||) 运算符返回右边的值。
如果字符串的长度不是 N 的倍数,则数组中最后一项的长度将为 minimum 1
,但小于 N。
const str = 'bobbyhadz.com'; const result = str.match(/.{1,4}/g) || []; // 👇️ [ 'bobb', 'yhad', 'z.co', 'm' ] console.log(result);
如果您希望避免使用正则表达式,请改用循环for
。
for
使用循环每 N 个字符拆分一个字符串
这是一个三步过程:
- 使用
for
循环每 N 个字符迭代一次字符串。 - 在每次迭代中,将 N 个字符的子字符串推送到数组。
- 返回包含子字符串的数组。
function splitEveryN(str, n) { const arr = []; for (let index = 0; index < str.length; index += n) { arr.push(str.slice(index, index + n)); } return arr; } // 👇️ [ 'bobb', 'yhad', 'zabc' ] console.log(splitEveryN('bobbyhadzabc', 4)); // 👇️ [ 'bo', 'bb', 'yh', 'ad', 'za', 'bc' ] console.log(splitEveryN('bobbyhadzabc', 2));
该splitEveryN()
函数接受一个字符串 和n
作为参数,并每隔 N 个字符拆分该字符串。
我们使用for
循环以 N 为增量迭代字符串。
在每次迭代中,我们调用该String.slice()
方法以获取从当前索引开始并上升到索引 + N 的子字符串。
String.slice方法提取字符串的一部分并将其返回,而不修改原始字符串。
该String.slice()
方法采用以下参数:
姓名 | 描述 |
---|---|
起始索引 | 要包含在返回的子字符串中的第一个字符的索引 |
结束索引 | 要从返回的子字符串中排除的第一个字符的索引 |
for
循环遍历字符串后,我们返回包含结果的数组。
使用递归每 N 个字符拆分一个字符串
您还可以使用递归每 N 个字符拆分一个字符串。
function splitEveryN(str, n, arr = []) { if (str.length === 0) { return arr; } arr.push(str.slice(0, n)); return splitEveryN(str.slice(n), n, arr); } // 👇️ [ 'bobb', 'yhad', 'zabc' ] console.log(splitEveryN('bobbyhadzabc', 4)); // 👇️ [ 'bo', 'bb', 'yh', 'ad', 'za', 'bc' ] console.log(splitEveryN('bobbyhadzabc', 2));
该函数将字符串 ann
作为参数,并每隔 N 个字符拆分字符串。
如果字符串的长度等于0
,我们在完成拆分字符串时返回数组。
否则,我们使用该Array.push()
方法将字符串的一部分从 index 推0
送到 index N
。
最后一步是使用字符串的剩余部分
n
和数组作为参数再次调用该函数。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: