在 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
方法过于含蓄和间接。