split('\n')在浏览器中失效但JSBin正常,求排查原因
split('\n')解析文本异常的常见原因 我来帮你梳理几个大概率的问题点,都是前端处理文本换行时容易踩的坑:
换行符的跨系统兼容问题
JSBin里的测试输入可能用的是Unix风格的\n换行,但浏览器中文本框的输入,在Windows系统下会是\r\n(回车+换行)的组合。如果你只用split('\n'),拆分后每一行的末尾会残留\r字符,比如第一行变成'\\page 1 \r',这会干扰后续的解析逻辑。建议改成兼容两种换行符的正则拆分:let lines = input.split(/\r?\n/),这样不管是\n还是\r\n都能正确拆分。输入字符串的转义误解
你给出的输入示例是'\\page 1 \n\ page 1.1',这里要注意:如果是用户在文本框里实际输入了换行(按下回车键),那输入的原始内容里是真实的换行符\n;但如果文本框里输入的是字符串形式的\n(即手动敲了反斜杠加n),那实际的字符是\和n,不是换行符,这时候split('\n')自然不会拆分。你可以在split前加一行console.log([...input].map(c => c.charCodeAt(0))),把每个字符的ASCII码打出来,确认有没有真正的换行符(ASCII码10)。组件对文本输入的额外处理
如果你是用框架组件(比如React的input或textarea)获取输入,有些场景下组件可能会对输入内容做转义或格式化,比如把换行转成<br>标签,或者过滤掉某些字符。可以直接打印input的原始内容,对比JSBin里的测试输入,看看两者是否完全一致——比如浏览器里的input是不是多了空格、转义符,或者少了换行符。代码截断导致的隐藏错误
你提供的代码片段是截断的:function parseTree(input) { if (input === '') { return ''; } console.log(in...,会不会是console.log之后的逻辑在浏览器里抛出了错误,导致你误以为是split的问题?打开浏览器控制台的“错误”面板,看看有没有未捕获的异常,或者补全代码逻辑后再测试。
内容的提问来源于stack exchange,提问作者Malvinka

