js 正则表达式 结果为true的解答

提问:在JS的正则表达式里遇到这个问题

\d{3} 是表示有3个数字, 那下面的例子中1000就有4个数字,就不满足\d{3}的情况, 按道理应该返回是false,但为什么alert(pattern.test(aa))返回的还是true呢,而且我发现怎么改1000,始终都是显示true,同样后面的0000也是怎么改都是ture,倒是中间的01添加或减少数字会显示false,

所有向各位大佬咨询一下是正则表达式哪里出来问题?正则表达式的完整代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>js 正则表达式 xinbiancheng.cn</title>
</head>
<body>
  <p>正则表达式 为什么结果一直为true的解答</p>
</body>
<script>
  var aa = '1000-01-0000';
  var pattern = /\d{3}-\d{2}-\d{4}/;
  alert(pattern.test(aa));
</script>
</html>

分析如下:

1 0 0 0 - 0 1 - 0 0 0 0   
0 1 2 3 4 5 6 7 8 9 10 11 12

表格第一行代表js的字符串,第二行代表字符串的索引

当我们从索引 的位置开始匹配时就是 000-01-0000,就满足正则表达式 /\d{3}-\d{2}-\d{4}/ 前3位是数字-中间2位数字-后面4位数字,所以始终是满足条件的。

如果我们指定从索引 0 的位置开始匹配时就是 1000-01-0000 就不满足正则表达式 /\d{3}-\d{2}-\d{4}/ 因为第一组1000 是4个数字,而我们的正则第一组 \d{3}是在3个数字。所以不匹配,返回为false。

如何指定从索引 0 的位置开始匹配呢?那就用了解正则表达式的元字符^, ^代表匹配输入字符串的开始位置,也就是索引 0 的位置

js正则表达式代码修改为:

<script>
  var aa = '1000-01-0000';
  var pattern = /^\d{3}-\d{2}-\d{4}/;
  alert(pattern.test(aa));
</script>