【问题标题】:Is it safe to just put "\n" instead of "[\r\n]" when writing a JavaScript Regular expression?在编写 JavaScript 正则表达式时只输入“\n”而不是“[\r\n]”是否安全?
【发布时间】: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


【解决方案1】:

JavaScript 将换行符视为\n,这就是为什么当你测试它时它匹配所有。 \r\n 是代表新行的 windows 风格,而基于 Unix 的系统使用 \n。如果不确定,可以使用这个正则表达式:/\r?\n/

【讨论】:

    【解决方案2】:

    不,不要将[\r\n] 替换为\n

    http://regex101.com 处的行结束仅是 \n,这就是您与 \r 不匹配的原因。

    在实际文本中,可能需要匹配回车符和换行符。

    此外,点与 JavaScript 正则表达式中的 \r 不匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多