【发布时间】:2022-07-29 12:23:36
【问题描述】:
更新:我最初的测试涉及从文本文件复制/粘贴到浏览器中存在缺陷。我在 JavaScript 中创建了一个新测试,验证回车 \r 实际上是匹配的。
以下代码将['\r', '\r', '\r'] 记录到控制台,这会验证\r 是否被匹配:
<script>
const CarriageReturn = String.fromCharCode(13); // char code for carriage return is 13
const str = CarriageReturn + CarriageReturn + CarriageReturn;
const matches = str.match(/\r/g);
console.log(matches); // this will output ['\r', '\r', '\r']
</script>
原始问题
互联网上大量 StackOverflow 答案和文章建议匹配正则表达式中的换行符的常用方法是使用无处不在的标记 [\r\n]。据说是为了确保与 Windows 系统的兼容性,因为 Windows 使用回车符\r 和换行符\n 一起创建一个新行,而不是仅用于基于 UNIX 的操作系统(如 Linux)的换行符 \n或 Mac。
我开始认为 JavaScript 忽略了这种区别,只是将每个换行符视为 \n。
今天,我做了一个实验,我创建了一个包含 10 个回车符的文本文件,打开了文本文件,然后将回车符复制/粘贴到 https://regex101.com 的正则表达式测试器中。
当我针对简单的正则表达式 \r 测试所有这些回车时,没有匹配项。但是,使用替代 \n 匹配所有 10 个回车符。
所以我的问题是,根据我的实验,在 JavaScript 中匹配换行符时只写 \n 而不是 [\r\n] 是否安全?
【问题讨论】:
-
取决于您从哪里获取数据。我打赌浏览器在粘贴时将 \r\n 转换为 \n。
标签: javascript regex line-breaks carriage-return linefeed