在 JavaScript 中每 N 个字符拆分一个字符串

在 JavaScript 中每 N 个字符拆分一个字符串

Split String into Substrings of N characters in JavaScript

要每隔 N 个字符拆分一个字符串,请对match()字符串调用该方法,将以下正则表达式传递给它/.{1, N}g/

match方法将返回一个包含长度为 N 个字符的子字符串的数组。

索引.js
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 个字符。

索引.js
const str = 'bobbyhadzabc'; const result = str.match(/.{1,4}/g) || []; // 👇️ [ 'bobb', 'yhad', 'zabc' ] console.log(result);

我们使用了g(global) 标志,因为我们想要匹配字符串中出现的所有正则表达式,而不仅仅是第一次出现的地方。

如果删除g标志,则只有第一次出现的正则表达式在字符串中匹配。

索引.js
const str = 'bobbyhadzabc'; const result = str.match(/.{1,4}/) || []; // 👇️ [ 'bobb' ] console.log(result);

如果在字符串中未找到正则表达式,则该match方法返回null

这就是为什么我们使用逻辑或 (||) 运算符来返回一个空数组。

索引.js
const str = ''; const result = str.match(/.{1,4}/g) || []; // 👇️ [] console.log(result);

如果左边的值为假,则逻辑 OR (||) 运算符返回右边的值。

如果字符串的长度不是 N 的倍数,则数组中最后一项的长度将为 minimum 1,但小于 N。

索引.js
const str = 'bobbyhadz.com'; const result = str.match(/.{1,4}/g) || []; // 👇️ [ 'bobb', 'yhad', 'z.co', 'm' ] console.log(result);

如果您希望避免使用正则表达式,请改用循环for

for使用循环每 N 个字符拆分一个字符串

这是一个三步过程:

  1. 使用for循环每 N 个字符迭代一次字符串。
  2. 在每次迭代中,将 N 个字符的子字符串推送到数组。
  3. 返回包含子字符串的数组。
索引.js
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 个字符拆分一个字符串。

索引.js
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和数组作为参数再次调用该函数。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: