当按 \n 分割时,忽略行末和行首的换行符?

4

我正在尝试将一些文本拆分成单独的行,同时保留空格以供JS语法高亮使用:

var text = '\n\n\ntest\n\ntext\n\n';

当我使用.split('\n')时,我的数组中会有许多空元素:
> text.split('\n');
["", "", "", "test", "", "text", "", ""]

目前,我在分割文本之前使用.strip()方法,但这看起来很杂乱:

> text.replace(/^\s+|\s+$/g, '').split('\n');
["test", "", "text"]

有没有办法在使用.split()时忽略末尾和开头的换行符?我尝试编写正则表达式,但效果不佳。

split()是一个非常简单的单一功能函数(我认为这很好),尽管正则表达式使其具有巨大的灵活性,但它也有其限制,因此在我看来,使用replace()(这是在这种形式中常用的trim()替代品)是完全可以的。如果你觉得它很“凌乱”,你总可以通过将其部分提取到单独的函数中(例如trim(),这也是相当可重复使用的)来使其更易读。 - jJ'
3个回答

2
var text = '\n\n\ntest\n\ntext\n\n lorem ipsum';
var arr = text.match(/[ \w]+/g);

console.log(arr); //=> ["test", "text", " lorem ipsum"]

我正在努力保留文本本身出现的空格。 - Blender
@Blender:看一下编辑,应该可以了。另外你想做什么?只是把所有行分别放入一个数组中吗? - elclanrs
我也试图在文本中保留换行符(这是为了JS语法高亮),但我认为只用一个正则表达式是不可能的。.trim().split('\n') 是最简洁的方法了。感谢您的帮助! - Blender

0

虽然我不能完全理解你的逻辑,但也许以下内容可以帮助你使用split进行解析:

var text = "\n\n\ntest\n\ntext\n\n",
    parsed = ("\n" + text + "\n").split(/^\n+|\n+$|\n/).slice(1, -1);

console.log(parsed);   // ["test", "", "text"]

"еғ”иҮӨж›өеѓЏ (" " + text + " ").split(/^\s+|\s+$|\n/).slice(1, -1) 的写法пәЊдҢ†еҚідҢүиү™ж ·пәЊе®ѓдәәд№Һд№џжІҰжњ‰жҮ” replace/trim ж–№жі•ж›өеӨҢ :)" - jJ'

0
你可以使用 split(/\n+/) 尽可能多地消耗换行符,然后进行分割。

我正在尝试保留文本本身中出现的空格。 - Blender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接