JavaScript regular expressions reference pages, updates, browser compatibility, May 23, 2023

MDN JavaScript 正则表达式的新参考页面

阅读时间 5 分钟

我们 MDN Web Docs 的 JavaScript 正则表达式(regex)文档是我们最受欢迎的资源之一。感谢 Joshua Chen 的努力,我们现在为每个特性都提供了专门的页面,其中包含更全面的语法和语义信息,以及浏览器兼容性信息。让我们来看看这些新页面,它们的信息是如何组织的,以及新文档如何帮助您编写 JavaScript 正则表达式。

JavaScript 正则表达式指南

在此计划之前,我们首先推出了一个 正则表达式指南,该指南解释了什么是正则表达式以及如何在 JavaScript 中使用它们。该指南有几个子页面,将内容分为以下几个部分:

如果您是正则表达式新手,或者需要回顾基本概念,这些指南和速查表将非常有用。我们过去缺乏的是能够帮助那些已经熟悉基础知识并希望快速查找特定语言特性的读者。

刷新此主题并添加新文档的第一步是在 GitHub 上进行讨论 以收集反馈,随后是 Josh 的初步 拉取请求,其中包含建议的更改和新页面的框架。经过几轮修改,我们很高兴这些更改已合并到 MDN 的内容存储库中,并且新页面现已上线。

正则表达式参考页面

指向所有新文档的入口点是 正则表达式参考。共有 18 个新页面针对单个特性,并且已删除了包含已弃用信息的现有内容。新的参考资料按以下部分和类别进行组织:

  • 创建正则表达式 - 如何在 JavaScript 中创建正则表达式
  • 标志 - 改变正则表达式解释方式的标志
  • 断言 - 如果模式匹配某个条件,例如字符串的开头或单词边界
  • 原子 - 构成模式的单元,例如字符类和字面字符
  • 其他特性 - 量词等有助于您构建模式的特性

位于 原子 下的内容是新文档最集中的地方,如果您想构建正则表达式,很可能会在这里花费大部分时间。有了这样的分段组织,现在就有了一条清晰的路径来查找您所需的信息或更深入地理解特性的工作原理。

为每个特性提供参考意味着它在搜索结果中更显眼,更容易找到。此外,每个页面都包含在侧边栏导航中,因此,如果您访问了某个特性的文档,但实际上想查找其他内容,应该能够快速找到它。

新页面的亮点

新页面在语法和语义方面非常全面,其中包含一个描述部分,希望能够帮助您了解需要注意的陷阱或注意事项。除了语法和语义之外,查看使用特性的示例总是有帮助的。让我们在接下来的几个部分中看看我最喜欢的一些示例。

捕获组和命名捕获组

关于 捕获组 的参考页面有一个很好的示例,展示了如何匹配 YYYY-MM-DD 格式的日期并提取年份、月份和日期。这很有用,因为这是一种常见的操作,您可能需要在不引入完整日期解析库的开销的情况下进行。

js
function parseDate(input) {
  const parts = /^(\d{4})-(\d{2})-(\d{2})$/.exec(input);
  if (!parts) {
    return null;
  }
  return parts.slice(1).map((p) => parseInt(p, 10));
}

parseDate("2019-01-01"); // [2019, 1, 1]
parseDate("2019-06-19"); // [2019, 6, 19]

正则表达式最常见的抱怨之一是它们很难读。如果您正在使用捕获组,可以使用 命名捕获组 来使您的模式更容易理解。

js
function parseLog(entry) {
  const { author, timestamp } = /^(?<timestamp>\d+),(?<author>.+)$/.exec(
    entry,
  ).groups;
  return `${author} committed on ${new Date(
    parseInt(timestamp) * 1000,
  ).toLocaleString()}`;
}

parseLog("1560979912,Caroline"); // "Caroline committed on 6/19/2019, 5:31:52 PM"

这个例子很不错,因为它展示了如何解析日志条目,提取时间戳和作者,并将结果格式化成更易读的内容。第一次阅读代码的人会更容易理解正则表达式的作用。

Unicode 字符类转义

关于 Unicode 字符类转义 的页面有一个很好的示例,说明如何检测字符串是否包含不同脚本中的字符。如果您试图检测不同语言的字符串,而又不想手动或详尽地在模式中指定某些字符(或字符范围),这会很有用。

js
const mixedCharacters = "aεЛ";
// Using the canonical "long" name of the script
mixedCharacters.match(/\p{Script=Latin}/u); // a
// Using a short alias (ISO 15924 code) for the script
mixedCharacters.match(/\p{Script=Grek}/u); // ε
// Using the short name sc for the Script property
mixedCharacters.match(/\p{sc=Cyrillic}/u); // Л

字符类

正则表达式的 字符类 可能被认为是基础特性之一,但参考页面上的示例表明,在某些用例中它们可以非常强大。该示例展示了如何匹配十六进制数字,我喜欢它是因为它说明了范围如何与 i 标志结合使用以进行不区分大小写的匹配。

js
function isHexadecimal(str) {
  return /^[0-9A-F]+$/i.test(str);
}

isHexadecimal("2F3"); // true
isHexadecimal("beef"); // true
isHexadecimal("undefined"); // false

浏览器兼容性信息

每个正则表达式参考页面都包含相应特性的 浏览器兼容性数据。这意味着浏览器支持信息现在更加细粒度,您可以查看支持或不支持某个特性的浏览器版本。

下一步是什么?

正则表达式参考将帮助更高级的用户快速找到他们需要的信息,同时也帮助初学者更多地了解正则表达式。这些参考资料还将极大地帮助记录目前正在开发中的新 v 模式,该模式预计将增加对集合差/减、集合交集和嵌套字符类的支持。为每个正则表达式特性提供单独的参考页面将更容易详细解释使用 v 标志的新特性。有关此标志的更多信息,请参阅 TC39 提案

总结

我们已经介绍了一些新正则表达式参考页面的亮点,希望您觉得它们有用。我们很高兴有了这些新内容,以及 Josh 和 MDN Web Docs 团队其他成员取得的重大改进。如果您想深入了解这些新页面,请务必查看这些参考资料和指南的入口页面:

如果您喜欢这篇文章或有任何反馈,请随时加入 MDN Web Docs 的 Discord 服务器 进行讨论,或在 GitHub 讨论 中发表评论。

祝您匹配愉快!