是否有任何正则表达式(!)可以测试字符串是否包含 3 位数字(不要介意顺序)?
(至少 3 位数。我也很高兴看到确切的 3 解决方案。(如果你好心的话))
例子 :
abk2d5k6 //3 digits
abk25k6d //same here //3 digits
我的失败尝试:
.+?(?=\d){3}
谢谢。
(出于学习目的,请仅使用正则表达式解决方案。)。
是否有任何正则表达式(!)可以测试字符串是否包含 3 位数字(不要介意顺序)?
(至少 3 位数。我也很高兴看到确切的 3 解决方案。(如果你好心的话))
例子 :
abk2d5k6 //3 digits
abk25k6d //same here //3 digits
我的失败尝试:
.+?(?=\d){3}
谢谢。
(出于学习目的,请仅使用正则表达式解决方案。)。
好吧,出于学习的目的,我建议通读这个非常全面的教程。
否则,JavaScript 正则表达式可能看起来像这样:
如果您想确保至少有三位数字:
/^(?:\D*\d){3}/
或者,如果您想确保恰好是三个数字:
/^(?:\D*\d){3}\D*$/
\D
是任何非数字字符。*
允许其中的 0 个或更多。\d
是任何数字字符。{3}
重复子模式 3 次。And^
和$
分别标记字符串的开始和结束。
你也可以这样做:
str.match(/\d/g).length >= 3
这非常简单,并且非常清楚地显示了没有复杂正则表达式的意图。
不过,这并没有针对速度进行调整。
鉴于您希望“至少”三位数的评论,我认为它不需要比以下更复杂:
/\d.*\d.*\d/
...这是一个数字,然后是零个或多个任何东西,然后是另一个数字,然后是零个或多个任何东西,然后是另一个数字。由于我没有锚定任何一端,因此两端都有一个隐含的“零个或多个任何东西”。
console.log(!!"abk2d5k6".match(/\d.*\d.*\d/)); // true
console.log(!!"abk25k6d".match(/\d.*\d.*\d/)); // true
console.log(!!"abkd5k6".match(/\d.*\d.*\d/)); // false (I removed a digit)
console.log(!!"abk2k6d".match(/\d.*\d.*\d/)); // false (I removed a digit)
或者
/(\d.*){3}/
console.log(!!"abk2d5k6".match(/(\d.*){3}/)); // true
console.log(!!"abk25k6d".match(/(\d.*){3}/)); // true
console.log(!!"abkd5k6".match(/(\d.*){3}/)); // false (I removed a digit)
console.log(!!"abk2k6d".match(/(\d.*){3}/)); // false (I removed a digit)
或在 m.buettner 在下面的评论中指出,而不是.
您可以使用\D
(不是数字):
/\d\D*\d\D*\d/
或者
/(\d\D*){3}/
display(!!"abk2d5k6".match(/\d\D*\d\D*\d/)); // true
display(!!"abk25k6d".match(/\d\D*\d\D*\d/)); // true
display(!!"abkd5k6".match(/\d\D*\d\D*\d/)); // false (I removed a digit)
display(!!"abk2k6d".match(/\d\D*\d\D*\d/)); // false (I removed a digit)
display(!!"abk2d5k6".match(/(\d\D*){3}/)); // true
display(!!"abk25k6d".match(/(\d\D*){3}/)); // true
display(!!"abkd5k6".match(/(\d\D*){3}/)); // false (I removed a digit)
display(!!"abk2k6d".match(/(\d\D*){3}/)); // false (I removed a digit)
基本上,如果它是“至少”匹配,则不需要锚点。