Reputation: 371
I'm trying to find the exact match for the following strings;
/test/anyAlphaNumericId123
/test/anyAlphaNumericId123/
That will not match the following
/test/anyAlphaNumericId123/x
I have the following Regex currently, which matches both former cases and not the latter;
/(\/test\/)(.*?)(\/|$)/
But on attempting to call str.match on it, I will also get a result for the latter, as it has a partial match. Can I accomplish this with Regex alone?
Upvotes: 0
Views: 725
Reputation: 163447
You can write the pattern as:
^\/test\/[a-zA-Z0-9]+\/?$
The pattern matches:
^
Start of string\/test\/
Match /test/
[a-zA-Z0-9]+
Match 1+ times any of the allowed ranges\/?
Match an optional /
$
End of stringExample using a case insensitive match with the /i
flag:
const regex = /^\/test\/[a-z0-9]+\/?$/i;
[
"/test/anyAlphaNumericId123",
"/test/anyAlphaNumericId123/",
"/test/anyAlphaNumericId123/x"
].forEach(s =>
console.log(regex.test(s) ? `Match: ${s}` : `No match ${s}`)
);
Upvotes: 1