Skip to content

如何使用JavaScript检查一个字符串是否以另一个字符串的子字符串开头或结尾?

在之前的一个项目中,我遇到了一个让我停下来思考的问题。我想要检查一个从服务器序列化的截断的HTML字符串是否在标签的中间被截断。自然而然地,我决定不写一个一次性的解决方案,而是创建一个可重用的辅助函数。

检查一个字符串是否以另一个字符串的子字符串开头

String.prototype.startsWith()允许我们轻松地检查一个字符串是否以给定的子字符串开头。然而,在这个问题的情况下,仅仅使用这个方法是不够的。相反,我们可以使用String.prototype.slice()来获取另一个字符串的每个子字符串,并将其与我们的文本进行比较。

如果我们从目标字符串的最长子字符串到最短子字符串进行遍历,我们保证会首先遇到文本开头的最长子字符串。然后,如果找到了这个子字符串,我们可以返回它。否则,我们可以返回undefined

const startsWithSubstring = (text, word) => {
  for (i = word.length; i > 0; i--) {
    const substr = word.slice(-i);
    if (text.startsWith(substr)) return substr;
  }
  return undefined;
};

startsWithSubstring('/>Lorem ipsum dolor sit amet', '<br />'); // '/>'

检查一个字符串是否以另一个字符串的子字符串结尾

我们可以使用相同的方法来检查一个字符串是否以另一个字符串的子字符串结尾。唯一的区别是我们需要使用String.prototype.endsWith()代替String.prototype.startsWith(),并改变子字符串的遍历顺序

const endsWithSubstring = (text, word) => {
  for (i = word.length; i > 0; i--) {
    const substr = word.slice(0, i);
    if (text.endsWith(substr)) return substr;
  }
  return undefined;
};

endsWithSubstring('Lorem ipsum dolor sit amet<br /', '<br />'); // '<br />'

endsWithSubstring函数接受两个参数:一个字符串和一个子字符串。它返回一个布尔值,指示给定字符串是否以指定的子字符串结尾。

在这个例子中,我们调用endsWithSubstring函数,传入字符串'Lorem ipsum dolor sit amet<br /'和子字符串'<br />'。函数返回true,因为字符串'Lorem ipsum dolor sit amet<br /'以子字符串'<br />'结尾。

因此,输出结果为'<br />'