如何在 JavaScript 中按换行符拆分字符串

在 JavaScript 中按换行符拆分字符串

How to Split a String by Newline in JavaScript

要按换行符拆分字符串,请调用将split()以下正则表达式作为参数传递给它的方法 – /\r?\n/split方法将在每次出现换行符时拆分字符串并返回包含子字符串的数组。

索引.js
const str = 'first\nsecond\r\nthird'; const result = str.split(/\r?\n/); // 👇️ ['first', 'second', 'third'] console.log(result);

我们将正则表达式传递给
String.split
方法。

正斜杠/ /标记正则表达式的开始和结束。

我们想要同时替换\r\n字符,因为换行符因操作系统而异。

例如,Windows\r\n用作行尾字符,而\n是 Unix 中的默认值。

问号?与前面的项目 (\r) 匹配 0 次或 1 次。换句话说,\r可能存在,也可能不存在。

如果您在阅读正则表达式时需要帮助,请将

来自 MDN的
正则表达式速查表添加为书签。

您可能需要处理边缘情况 – 如果字符串以换行符结尾怎么办。在这种情况下,最后一个数组元素将是一个空字符串。
索引.js
const str = 'first\nsecond\r\nthird\n'; const result = str.split(/\r?\n/); // 👇️ ['first', 'second', 'third', ''] console.log(result);

我们在换行符上拆分字符串,但是在最后一个换行符之后没有任何内容,所以我们得到一个空字符串作为最后一个数组元素。

我们可以使用
Array.filter
方法来处理这个问题。

索引.js
const str = 'first\nsecond\r\nthird\n'; const result = str.split(/\r?\n/).filter(element => element); // 👇️ ['first', 'second', 'third'] console.log(result);

我们传递给filter方法的函数被数组中的每个元素调用。

在每次迭代中,我们按原样返回元素。

filter方法返回一个新数组,其中仅包含回调函数返回的真值。

Truthy 是所有不虚假的值。

JavaScript 中的假值是:false, null, undefined, 0, ""
(空字符串),
NaN(不是数字)。

空字符串是一个虚假值,因此它不会被添加到新数组中。

另一种更简洁的方法是将Boolean对象传递给filter方法。

索引.js
const str = 'first\nsecond\r\nthird\n'; const result = str.split(/\r?\n/).filter(element => element); // 👇️ ['first', 'second', 'third'] console.log(result);

Boolean对象从数组中获取每个元素,将其转换为布尔值并返回结果。

索引.js
console.log(Boolean('test')); // 👉️ true console.log(Boolean('')); // 👉️ false

空字符串是虚假值并被转换为false,因此它们不会被添加到新数组中。

您选择哪种方法是个人喜好的问题。我会明确返回数组元素,因为我发现这种Boolean方法过于含蓄和间接。