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
-1
中 1
的这一部分是可以匹配的。
匹配整串得在前面再加个 ^
(匹配串首)
在 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