当前位置: 首页 > 知识库问答 >
问题:

javascript - 正则表达式 /[1-9]\d*$/ 为什么-1输出的是true?

牧甫
2024-09-26
function isPositiveInteger(str) {
    const regex = /[1-9]\d*$/;
    return regex.test(str);
}

console.log(isPositiveInteger("-1")); // 输出 true, 应该输出 false
console.log(isPositiveInteger("1")); // 输出 true

为什么 -1 是 true

共有2个答案

小牛23265
2024-09-26

-11 的这一部分是可以匹配的。

匹配整串得在前面再加个 ^ (匹配串首)

洪建茗
2024-09-26

在 JavaScript 中,正则表达式 /[1-9]\d*$/ 用于匹配一个字符串,该字符串以非零数字开头([1-9]),后面跟着零个或多个数字(\d*)。然而,这个正则表达式并不直接处理字符串的符号或前缀,它只关注字符串中符合 [1-9]\d* 模式的字符序列。

在你的例子中,当你调用 isPositiveInteger("-1") 时,这个正则表达式实际上并没有检查字符串的开头是否为负号(-)。它仅仅从字符串的开头开始查找,尝试匹配 [1-9] 后的任何数字序列。由于字符串 "-1" 的第一个字符(-)不符合 [1-9],正则表达式本应该不匹配整个字符串。然而,这里有一个关键点:正则表达式默认是从字符串的开头开始匹配的,如果没有找到匹配项,则整个匹配失败。

但问题出在正则表达式本身并没有包含检查字符串开头的逻辑(如使用 ^ 符号来确保从字符串的开头开始匹配)。由于 -1 字符串中并不包含从 [1-9] 开头的数字序列(考虑到整个字符串),理论上应该返回 false。然而,由于正则表达式的具体实现和行为可能因 JavaScript 引擎而异,实际上这里的问题可能源自于对函数 isPositiveInteger 的理解或实现上的误解。

对于你的特定情况,如果你想要确保字符串仅匹配正整数(不包含负号或前导零),你应该使用正则表达式 /^[1-9]\d*$/。这里的 ^ 符号确保了匹配必须从字符串的开头开始。

修改后的代码如下:

function isPositiveInteger(str) {
    const regex = /^[1-9]\d*$/; // 注意这里添加了 ^ 符号
    return regex.test(str);
}

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

现在,这个正则表达式将正确地识别出 "-1" 不是正整数,因为它以负号开头。

 类似资料:
  • 问题内容: 我需要寻找java regex模式,该模式以1 = 1的格式查找输入字符串,其中前缀“ =”应具有与后缀相同的位数。同样,这里的前缀和后缀值应相同,例如1 = 1、11 = 11、223 = 223。像1 = 2、3 = 22、33 = 22之类的值不应与模式匹配 我们能否有一个满足上述规则的一般模式。 问题答案: 使用反向引用: 当然,在Java中,您需要转义反斜杠:

  • 序:世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出关注的数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式。 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 正则表达式通常被用来匹配、检索、替换和分割那些符合某个模式(规则)的文本。 Python 自1.5版本起

  • 我试图理解正则表达式^(\d{1,2})$在google Sheets中代表什么。快速浏览一下regex站点和intools让我感到困惑。有谁能帮忙吗?

  • 问题内容: 以下代码是众所周知的将重音符转换为纯文本的代码: 我用这种方法代替了“手工制作”方法,但是我需要了解replaceAll的“ regex”部分 1)什么是“ InCombiningDiacriticalMarks”? 2)它的文档在哪里?(和类似的?) 谢谢。 问题答案: 是Unicode块属性。在JDK7中,您将可以使用两部分表示法来编写它,这对于读者来说可能更清楚。它在UAX#44

  • 本文向大家介绍EditPlus中的正则表达式 实战(1),包括了EditPlus中的正则表达式 实战(1)的使用技巧和注意事项,需要的朋友参考一下 相关阅读: EditPlus中的正则表达式 实战(1) EditPlus中的正则表达式 实战(2) EditPlus 正则表达式 实战(3) EditPlus中的正则表达式 实战(4) EditPlus中的正则表达式实战(5) EditPlus中的正则

  • 它给出的输出为“cricket”。但我不明白为什么?http://ideone.com/fteahg