I was trying to debug while a seemingly very simple regular expression in JavaScript was failing.
The goal was to catch expressions going to an API endpoint that looked like:
/endpoint/145,14,93
The regex I had was working fine in regex101.com’s simulator:
^/endpoint/\d+,\d+(?:,\d+)*$
But running under node.js, it wouldn’t work – it would catch a single digit, but not any subsequent digits.
Spent a while trying different things – mostly assuming I was doing something boneheaded due to my lack of familiarity with node.js. A colleague verified the same thing and also wasn’t sure.
I then realised it worked fine if I replaced the \d with [0-9]. I thought this was weird – the MDN documentation says:
Matches any digit (Arabic numeral). Equivalent to [0-9] . For example, /\d/ or /[0-9]/ matches “2” in “B2 is the suite number”. |
… which made me assume they were the same thing.
After much websearching & the usual difficulty in finding meaningful results with search terms like “\d”, in desperation, I thought I’d ask ChatGPT, and got the following result:
The fourth point seems to be the case – the \d is also matching the comma.
I’m sure this is documented somewhere (otherwise how else would ChatGPT know about it?!) but I couldn’t find it referenced in any of the stuff that came up through common search terms.