KwehDev
KwehDev

Reputation: 371

Testing for exact string with Regexp

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

Answers (1)

The fourth bird
The fourth bird

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 string

Regex demo

Example 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

Related Questions