I am trying Javascript's regular expression.
I understand that '|' is used to or-ing two regular expression.
I created a regex /^a*|b*$/, and I want it to detect any string that contains only charater of 'a' or 'b'.
But when I try /^a*|b*$/.test('c'), it produces true?
What I am missing understading of '|' operator?
Here's my code:
let reg = /^a*|b*$/;
< undefined
reg.test('c');
< true
|has very low precedence.^a*|b*$matches^a*b*$i.e. either a string beginning with 0 or more 'a's or a string ending with 0 or more 'b's. (Because matching 0 'a's is allowed by the regex, any string will match (because every string has a beginning).)
To properly anchor the match on both sides, you need
(the
(?:)construct is a non-capturing group).You could also use
instead.
Note that both of these regexes will only match strings like
aa,bbbbbb, etc., but notaba. If you want to allow the use of mixed a/b characters in a string, you need something like