Javascript正则表达式:丢弃字符串匹配结束

时间:2013-12-09 10:04:08

标签: javascript regex

我想拆分保留换行符的字符串。字符串可以是一切,所以代码必须在任何情况下都有效(字符串开头的新行,字符串的结尾,连续的新行...)。

我正在使用此代码:

var text = "abcd\nefg\n\nhijk\n"
var matches = text.match(/.*\n?/g)

产生以下结果:

[ 'abcd\n', 'efg\n', '\n', 'hijk', '' ]

这就是我需要的,除了最后一场比赛('')。

实际上我使用matches.pop()来删除它,但我想知道是否可以改进正则表达式以避免匹配。

如果你可以解释为什么会出现这种情况,我会找到奖励积分(我找不到任何理由,但我在正则表达式上吮吸:-))。

2 个答案:

答案 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' ]