我想拆分保留换行符的字符串。字符串可以是一切,所以代码必须在任何情况下都有效(字符串开头的新行,字符串的结尾,连续的新行...)。
我正在使用此代码:
var text = "abcd\nefg\n\nhijk\n"
var matches = text.match(/.*\n?/g)
产生以下结果:
[ 'abcd\n', 'efg\n', '\n', 'hijk', '' ]
这就是我需要的,除了最后一场比赛(''
)。
实际上我使用matches.pop()
来删除它,但我想知道是否可以改进正则表达式以避免匹配。
如果你可以解释为什么会出现这种情况,我会找到奖励积分(我找不到任何理由,但我在正则表达式上吮吸:-))。
答案 0 :(得分:2)
使用替代方案:
var text = "abcd\nefg\n\nhijk\n";
var matches = text.match(/.+\n?|\n/g);
答案 1 :(得分:1)
您可以使用array#filter
:
var matches = text.match(/.*\n?/g).filter(Boolean);
//=> [ 'abcd\n', 'efg\n', '\n', 'hijk' ]
或者使用略有不同的正则表达式与非可选\n
(但它假设新行总是在最后一行之后):
var matches = text.match(/.*\n/g);
//=> [ 'abcd\n', 'efg\n', '\n', 'hijk' ]