You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript split()方法为何给字符串加 ? 的作用是什么?

问题

我尝试利用获取的数据创建数组并生成新的Set对象,但发现生成的字符串末尾带有\r。相关代码如下:

export const WordSetFn = async () =>{
    let wordSet;
    await fetch(wordsSet).then((resp) =>
        resp.text()
    ).then((resp) =>{
        const wordSetArray = resp.split("\n")
        wordSet = new Set(wordSetArray)
    })
    return {wordSet};
} // word set would look like this: {"above\r",...}

我获取数据的TXT文件内容为每行一个单词,格式如下:

aback
abase
abate
abbey
abbot
abhor
abide
abled
abode
abort
...

想请教:为何split()处理后字符串末尾会出现\r?\r具体有什么作用?

解答

为什么会出现\r?

你的TXT文件应该是在Windows系统下创建的——Windows里的换行标记是**\r\n**(回车+换行),而你用split("\n")分割字符串时,只会把\n作为分割符,\r就会留在每个单词的末尾,导致出现类似"above\r"的结果。

\r是什么,有什么作用?

\r是回车符(Carriage Return),最早起源于老式打字机:按下回车按键,打印头会回到当前行的开头位置;而\n是换行符(Line Feed),作用是让纸张向下滚动一行。

到了现代操作系统,不同平台的换行标准有差异:

  • Windows系统沿用\r\n作为换行标记
  • Unix/Linux/macOS系统只用\n
  • 早期的Mac系统只用\r

解决方法

有两种简单的处理方式:

  1. 用正则表达式兼容所有换行格式,分割时匹配\r可选的情况:
const wordSetArray = resp.split(/\r?\n/)
  1. 分割后对每个单词做去空白处理,去掉末尾的\r和可能的其他空白字符:
const wordSetArray = resp.split("\n").map(word => word.trim())

注意:如果单词本身前后有需要保留的空白字符,优先用第一种方法更稳妥。

内容的提问来源于stack exchange,提问作者mutedJunior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:29:59