【问题标题】:Is there a difference between \d and \d+? [duplicate]\d 和 \d+ 之间有区别吗? [复制]
【发布时间】:2016-11-01 19:12:25
【问题描述】:

https://www.freecodecamp.com/challenges/find-numbers-with-regular-expressions

我在 FCC 上一节课,他们提到数字选择器 \d 找到一个数字,并在选择器前面添加一个 + (\d+) 允许它搜索多个数字。

我对它进行了一些实验,发现它是在搜索每个数字的表达式之后的 g,而不是 +。我尝试在表达式后使用不带 g 的 \d+,它只匹配字符串中的第一个数字。

基本上,不管我用\d还是\d+,只要我在表达式后面加上g,它就会找到所有的数字。所以我的问题是,这两者有什么区别?

// Setup
  var testString = "There are 3 cats but 4 dogs.";

  var expression = /\d+/g;
  var digitCount = testString.match(expression).length;

【问题讨论】:

  • \d = 一位数,\d+ = 至少一位数。 "22".match(/\d/g) -> Array [ "2", "2" ],但 "22".match(/\d+/g) -> Array [ "22" ]
  • 尝试使用测试字符串“有 3 只猫,但有 41 只狗。”你会看到区别
  • 哦,我明白了。谢谢

标签: javascript regex


【解决方案1】:

末尾的g 表示global,即。您要搜索所有出现的事件。没有它,你只会得到第一场比赛。

\d,如您所知,表示一位数。您可以添加量词来指定是要匹配以下所有数字,还是之后要匹配一定数量的数字。

\d 表示单个数字

\d+ 表示所有连续数字

假设我们有一个这样的字符串:

123 456
7890123

/\d/g 将匹配 [1,2,3,4,5,6,7,8,9,0,1,2,3]

/\d/ 将匹配 1

/\d+/ 将匹配 123

/\d+/g 将匹配 [123,456,7890123]

您也可以使用/\d{1,3}/g 表示您要匹配序列中所有出现的 1 到 3 位数字。

另一个常见的量词是星号,表示 0 或更多。例如,/1\d*/g 将匹配所有以 1 开头并在其后有 0 个或多个数字的数字序列。

【讨论】:

    【解决方案2】:

    计算\d 的出现次数将找到字符串中位数的个数。

    计算\d+ 的出现次数将找到字符串中整数的个数。

    I.E.

    123 456 789
    

    有 9 个数字,但有 3 个整数

    【讨论】:

    • numbers 这个词会不会有点误导,在解析像 3.14 这样的浮点数时,它会被视为两个数字。从技术上讲,它由两个数字组成,我认为最好用正则表达式语法解释+ 的作用。
    • @kb。从他们的问题来看,我认为他们从课程和实验中理解了语法部分,他们只是对它们在用法上的不同之处感到好奇。我认为只要对每个人都有意义,就语义上的一些挥手是允许的。
    【解决方案3】:

    \d 表示从 0 到 9 的任何数字,+ 表示“一次或多次”。

    只要你的数字是个位数就没有区别,但在字符串“我有 23 头奶牛”中,\d 将单独匹配 2,而 \d+ 将匹配 23。

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2017-04-07
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2010-10-11
      相关资源
      最近更新 更多