Skip to main content
Code & Markup · In-Browser Regular Expression Lab

Semantic Version Regex — Match MAJOR.MINOR.PATCH with Pre-release

Full SemVer 2.0.0 specification regex validating major, minor, patch, and optional pre-release/build tags.

Flags:
//none
Match Found
Load Sample:
Match Inspection & Details1 match
Match #1:1.0.0

Test Samples Verification Matrix

Expected Valid Samples (Should Match)

1.0.0 Pass
2.14.3-beta.1 Pass
0.4.0+build.1882 Pass
3.0.0-rc.2+sha.5114f85 Pass

Expected Invalid Samples (Must Reject)

1.0 Rejected (Pass)
01.2.3 Rejected (Pass)
v1.0.0 Rejected (Pass)
1.2.3.4 Rejected (Pass)
Code Implementation Generator
// JavaScript / TypeScript (ES6+)
const pattern = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
const text = "1.0.0";

const isMatch = pattern.test(text);
console.log("Is Match:", isMatch);

if (isMatch) {
  const matches = text.match(pattern);
  console.log("Matches:", matches);
}

Regular Expression Token Breakdown

Checks 3 non-negative integer numbers without leading zeros, plus optional pre-release and build metadata. Each component of the regular expression serves a distinct syntactical purpose as mapped below:

Token PatternName / ComponentFunction & Rule
(0|[1-9]\d*)Major versionNon-negative integer without leading zeroes.
\.(0|[1-9]\d*)Minor versionMinor number component.
\.(0|[1-9]\d*)Patch versionPatch number component.
(?:-...Pre-releaseOptional hyphen-separated tags like -alpha.1 or -beta.
(?:\+...Build metadataOptional plus-separated build hashes.

Frequently Asked Questions

How to permit leading 'v'?
Prefix the pattern with `^v?`.
Browse All 40 Patterns