Skip to content

如何在JavaScript中生成字符串的所有子字符串?

有时候,您可能需要生成字符串的所有子字符串。这在各种情况下都很有用,比如字符串匹配或字符串压缩。幸运的是,使用JavaScript的生成器函数,这是一个相当简单的任务。

左子字符串生成器

使用for...in循环,我们可以遍历字符串,并yield每个子字符串,从开头开始。我们可以使用String.prototype.slice()来获取子字符串。为了提前终止,我们可以使用String.prototype.length来检查字符串是否为空。

const leftSubstrGenerator = function* (str) {
  if (!str.length) return;
  for (let i in str) yield str.slice(0, i + 1);
};

[...leftSubstrGenerator('hello')];
// [ 'h', 'he', 'hel', 'hell', 'hello' ]

右子字符串生成器

同样的技术可以在字符串末尾开始时使用for...in循环。与之前一样,只是稍作修改,我们可以使用String.prototype.slice()来获取子字符串。同样,如果字符串为空,我们使用String.prototype.length提前终止。

const rightSubstrGenerator = function* (str) {
  if (!str.length) return;
  for (let i in str) yield str.slice(-i - 1);
};

[...rightSubstrGenerator('hello')];
// [ 'o', 'lo', 'llo', 'ello', 'hello' ]