Restrict Possible Usernames - Trouble with /g flag

Tell us what’s happening:
I’m trying to understand why my code fails for “JACK” and “RegexGuru” when I have the global flag /g, but when I remove the global flag it passes.

Your code so far


let username = "JackOfAllTrades";
let userCheck = /[a-z][a-z]+\d*$/gi; // Change this line
let result = userCheck.test(username);

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/regular-expressions/restrict-possible-usernames

If the regex has the global flag set, test() will advance the lastIndex of the regex. A subsequent use of test() will start the search at the substring of str specified by lastIndex ( exec() will also advance the lastIndex property). It is worth noting that the lastIndex will not reset when testing a different string.

1 Like

Thanks! So this has to do with the .test() method and how it interacts with the global flag? I don’t really get it yet but this seems to be a good jumping off point to learn more.

FCC tests involve checking your regex pattern against multiple strings. When you use the global flag, each successive test does not start at the beginning of the string. This willl cause the tests to fail.

It’s starting to make more sense now. This helped a lot, thank you.

I’m glad I could help. Happy coding!