以下代码如何表示两个连续的数字?

时间:2018-04-18 15:20:49

标签: javascript regex

这是关于FCC测试版的练习,我无法理解以下代码如何表示两个连续数字看\D*表示不是0或更多数字而\d表示数字,所以这是怎么回事?在正则表达式中积累到两个数字?

let checkPass = /(?=\w{5,})(?=\D*\d)/;

2 个答案:

答案 0 :(得分:3)

这与两个数字不匹配。除了空字符串之外,它并不真正匹配,因为在查找之前没有任何内容。

如果你想匹配两位数,你可以这样做:

(\d)(\d)

或者,如果您真的想要使用(?=\D*\d)部分进行正面查找,则必须执行以下操作:

\d(?=\D*\d)

这将匹配最后一个数字,后面跟着一堆非数字和一个数字。一些例子(突出显示匹配的数字):

2 hhebuehi3
^
245673
^^^^^
2v jugn45
^      ^

要捕获第二个数字,您必须在两个数字周围加上括号。即:

(\d)(?=\D*(\d))

Here it is in action

为了做你原来的例子想要的,即:

  • 5 + \w个字符
  • 非数字字符
  • 一个数字

...您需要在原始示例之前加上\d字符。这意味着您的查找实际上将匹配不仅仅是空字符串的内容:

\d(?=\w{5,})(?=\D*\d)

重要编辑

在使用JavaScript在线控制台玩了一下之后,我已经解决了原始正则表达式的问题。

匹配包含5个或更多字符的字符串,包括至少1个数字。这个可以匹配两个数字,但它也可以匹配1个数字,3个数字,12个数字等。为了准确匹配5个或更多字符的字符串中的两个数字,您应该指定您在查找的后半部分中想要的位数:

let regex = /(?=\w{5,})(?=\D*\d{2})/;

let string1 = "abcd2";
let regex1 = /(?=\w{5,})(?=\D*\d)/;
console.log("string 1 & regex 1: " + regex1.test(string1));

let regex2 = /(?=\w{5,})(?=\D*\d{2})/;
console.log("string 1 & regex 2: " + regex2.test(string1));

let string2 = "abcd23";
console.log("string 2 & regex 2: " + regex2.test(string2));

我的原始答案是关于Regex的真空,我忽略了你将Regex与JavaScript结合使用的事实,当将Regex与字符串进行比较时,它的工作方式略有不同。我仍然不知道为什么你的原始答案应该匹配两个数字,但我希望这会更有帮助。

答案 1 :(得分:1)

?=积极向前看 w{5,}匹配任何单词字符(等于[a-zA-Z0-9_])
{5,}.匹配5和无限制 \D*匹配任何不是数字的字符(等于[^ 0-9])
*匹配零和无限制 \d匹配一个数字(等于[0-9])

此表达式是全局的 - 因此尝试匹配所有

您始终可以使用https://jsfiddle.net/vcoumu83/46/

检查您的表达方式