换行符匹配正则表达式 - /[\r\n]/ 与 /[\n]/ 相同吗?

3 javascript regex node.js ecmascript-6

就匹配字符串中的换行符而言 -与?/[\r\n]/相同/[\n]/

我正在阅读这篇博文: https ://davidwalsh.name/remove-multiple-new-lines

它说使用/[\r\n]/,但我只是想知道它是否总是与 相同/[\n]/,或者它们是否是一种维恩图,其中每个可能匹配不同的东西。

Cer*_*nce 5

不,它们不是同一件事。\r匹配回车符 (CR),同时\n匹配换行符 (LF)。在某些环境中,新行通常由\r\n(如Windows)指定,而在其他环境中,新行仅由(如Unix)指定\n。他们是不同的角色。

这是一个例子:

const file = 'line\r\nline2';
const file2 = 'line\nline2';

console.log(file.replace(/[\n]/g, '\nNEW LINE:\n')); // one replacement
console.log(file2.replace(/[\n]/g, '\nNEW LINE:\n')); // one replacement

console.log(file.replace(/[\r\n]/g, '\nNEW LINE:\n')); // two replacements
console.log(file2.replace(/[\r\n]/g, '\nNEW LINE:\n')); // one replacement
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您不能只使用[\n]而不是[\r\n]- 输出是不同的,它们将匹配字符串的不同部分。

通常,当您想要匹配未知格式的通用换行符时,可以使用

\r?\n
Run Code Online (Sandbox Code Playgroud)

匹配回车符(如果存在),然后是换行符。

正如评论所指出的,确实旧的Mac\r仅使用过,因此为了匹配这些,您可以先查找\ror\n然后匹配:

(?=\r|\n)\r?\n?
Run Code Online (Sandbox Code Playgroud)