I was taking freecodecamp.org course on JavaScript data structures, going through the RegExp chapter. I then came across the following assertion:
"The regular expression /(?=\w{3,6})(?=\D*\d)/
will check whether a password contains between 3 and 6 characters and at least one number".
(Here "check" meaning that regExp.test(password)
returns true)
This seems odd to me. First of all, looking around in Stack Exchange, I found in this post that states that A(?=B) is the definition of positive lookahead, and it makes no mention that A (the preceeding expression in the parenthesis) is optional. So, shouldn't freecodecamp's example have an expression before the first lookahead?
I believe that this another example is quite similar to the previously mentioned, but simpler so I will mention it in case the explanation is simpler, too:
Why does (?=\w)(?=\d)
, when checked against the string "1", returns true?, Shouldn't it look for an alphanumeric character followed by a numeric character?
PS: After a thought, I hypothesized that my first example checks both lookahead patterns independently (i.e. first it checks whether the string is made of three to six characters, returns true, then checks whether there is an alpha numeric character, and finally since both searchings returned true, the whole regexp test returns true). But this doesn't seem to be coherent with the definition mentioned in the post I've linked. Is there a more general definition or algorithm which the computer "internally" uses to deal with lookaheads?