0

在 Javascript 中,为什么

/^(\d{1}){3}$/.exec(123)

返回["123", "3"],但是

/^(\d{1})$/.exec(123)

返回null而不是["3"].

另外,为什么第一个表达式返回31后面的数字是什么时候^

4

1 回答 1

4

第一个案例

注意到这\d{1}等同于\d,

/^(\d{1}){3}$/

可以简化为

/^(\d){3}$/

意思是

  • 字符串的开头
  • 匹配一个三位数的字符串
  • 字符串的结尾

括号中\d定义了一个捕获组。正如这里这里所解释的,当你重复一个捕获组时,通常的实现只保留最后一次捕获。

这就是为什么最终的结果是

[
  "123", // the whole matched string
  "3",   // the last captured group
]

第二种情况

/^(\d{1})$/

可以再次简化为

/^(\d)$/

意思是

  • 字符串的开头
  • 匹配单个数字
  • 字符串的结尾

作为123一个三位数的字符串,它与正则表达式不匹配,因此结果为null.

于 2013-09-28T05:43:20.283 回答