Hello! 欢迎来到小浪资源网!


正则表达式/[1-9]d*$/为何会错误匹配“-1”?


正则表达式/[1-9]d*$/为何会错误匹配“-1”?

正则表达式 /[1-9]d*$/ 与 -1 的匹配结果

提供的正则表达式 /[1-9]d*$/ 旨在匹配以非零数字开头的正整数。然而,当将该正则表达式应用于 “-1” 时,它意外地输出 true。要理解原因,让我们逐一分析正则表达式的组件:

  • [1-9]:匹配范围 [1-9] 内的数字,表示正整数的开头。
  • d:匹配0到9之间的数字,表示正整数的后续数字。
  • *: 表示匹配前面元素 0 次或多次,允许正整数的结尾处出现零个或多个数字。
  • $: 锚定匹配的末尾,确保正则表达式只匹配整个字符串

按此定义,”-1″ 不应该被视为正整数,因为其第一个字符是 “-“。但由于正则表达式没有考虑负号,它只匹配串中最后一个数字,即 “1”。因此,它将 “-1” 解释为以 “1” 结尾的正整数,并输出 true。

为了准确匹配正整数,防止负数被错误识别,需要在正则表达式的开头加上一个 ^,表示匹配字符串的开头。更新后的正则表达式为 ^([1-9]d*)$,其中 ^ 确保整个字符串必须以正整数开头, $ 确保字符串完全匹配。使用修改后的正则表达式将输出如下:

> console.log(isPositiveInteger("-1")); // 输出 false > console.log(isPositiveInteger("1")); // 输出 true

相关阅读