原文: Regular Expression Metacharacters - What Does \d Mean in RegEx?

正则表达式,也称为 RegEx 或 RegExp,是用于匹配整个字符串或字符串特定部分的定义模式。该字符串包括所有字符,无论是字母、符号还是数字都行。

在这篇文章中,我们将会讲解正则符号\d,这个符号可以匹配数字。

我们将讨论什么内容

正则表达式中的 `\d` 是什么

\d 在正则表达式中不只是一个“字符”,它是用于匹配字符串的“元字符”之一。

按照定义,元字符是在定义匹配字符串模式时具有特殊含义的字符。

所以,\d 是一个可以匹配 0 到 9 中的任何数字的元字符。你可以使用它来匹配数字或数字集,例如电话号码、编号等。

除了\d,正则表达式中还有很多元字符,比如下面的:

  • \w 匹配所有单词字符(小写字母a到z、大写字母A到Z、数字0到9和下划线_)
  • \D 匹配所有非数字字符。它是 \d 的补集
  • \W 匹配所有非单词字符
  • \s 匹配所有空格字符,包括空格、制表符和回车符等。

如何使用 `\d` 元字符

下面我们一起看看怎样用\d元字符匹配数字。

第一个例子是匹配7253289593这个数字ID。

这是一个十位数,要想匹配它,你可以重复写十次\d元字符:

Screenshot-2023-03-02-at-12.10.33

或者也可以写一次\d,然后让它自己重复十次:

Screenshot-2023-03-02-at-12.11.39

你也可以匹配手机号,以美国手机号为例:

Screenshot-2023-03-02-at-12.16.25

或者这样匹配尼日利亚手机号码:

Screenshot-2023-03-02-at-12.17.33

\d元字符同样可以在 JavaScript 中使用:

// 测试一个数字ID
let id = '7253289593';
let regex1 = /\d{10}/g;

console.log(regex1.test(id)); // true

// 测试美国手机号码
let UsPhoneNum = '(123) 456-7890';
let regex2 = /\(\d{3}\)\s\d{3}-\d{4}/g;

console.log(regex2.test(UsPhoneNum)); // true

// 测试尼日利亚手机号码
let naijaPhoneNum = '08133333333';
let regex3 = /\d{11}/g;

console.log(regex3.test(naijaPhoneNum)); // true

数字字符集 `[0-9]` 和元字符 `\d` 之间的区别是什么

[0-9] 字符集和 \d 元字符之间没有什么很大的区别

一个可能存在的区别,就是某些正则表达式的语法不支持 \d 元字符,但支持 [0-9] 字符集。例如,grep 的正则表达式不支持 \d 元字符。

所以如果你在正则表达式中使用 [0-9] 代替 \d,你仍然能够进行字符的匹配。

例如,我们可以使用 [0-9] 而不是 \d 来匹配前面例子中的数字ID:

Screenshot-2023-03-02-at-12.28.17

可以看到这样依然可以匹配成功,因此,[0-9] 字符集和 \d 元字符之间没有任何差别。

总结

这篇文章介绍了 \d 正则表达式元字符是什么,以及如何使用它。我们还看了一些例子,并将\d 与数字字符集 [0-9] 进行了比较,以便了解它们的工作原理和区别。

感谢阅读。