网站搜索

Javascript 正则匹配跳过连续换行


所以我有这个字符串:

function abc() {\n\n    return def;\n}

我用这个:

string.match(/[^\r\n]+/g)

它分成三行:

匹配 1: function abc() {

匹配 2:返回 def;

匹配 3: }

但是它缺少第四个匹配项,应该是“{”之后没有字符的新行。

我正在使用网站 https://regex101.com/r/ALvFIN/1/ 进行测试。

设置为风格:ECMAScript

正则表达式: /[^\n]+/g

测试字符串:

function abc() {

    return def;
}

有没有办法正确匹配双换行 \n\n,并且第2行没有任何字符?我尝试过使用空白字符 \s 和 \S,但都不对。开始觉得我可能需要考虑其他解决方案。

答案#1

你似乎想匹配一个或多个非换行字符的字符串,或一个空行。

这个逻辑意味着你只是想要用单个换行符序列拆分字符串。

要匹配 ASCII 换行符 CRLF、LF 或 CR,你可以使用 /\r\n?|\n/。

要匹配任何 Unicode 换行序列,你可以使用 /\r\n|[\r\n\f\u000b\u0085\u2028\u2029]/。

console.log("function abc() {\n\n    return def;\n}".split(/\r\n?|\n/))

// Any Unicode line break sequence:
var rx = /\r\n|[\r\n\f\u000b\u0085\u2028\u2029]/;
console.log("function abc() {\n\n    return def;\n}".split(rx))

如果你仍然想使用 .match(),只需在你的正则表达式中添加一个带有 /m 标志的 ^$ 替代,以使 ^ 和 $ 匹配行的开头/结尾:

console.log("function abc() {\n\n    return def;\n}".match(/[^\r\n]+|^$/gm))

答案#2

如果你想将字符串拆分为其组成的多行,你可以使用这个:/^.*$/gm。注意m选项用于启用多行匹配。