diff --git a/index.js b/index.js index 1a30770..ef3065e 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,3 @@ export default function semverRegex() { - return /(?<=^v?|\sv?)(?:(?:0|[1-9]\d{0,9}?)\.){2}(?:0|[1-9]\d{0,9})(?:-(?:--?|0|[1-9]\d*|\d*[a-z]+\d*)){0,100}(?=$| |\+|\.)(?:(?<=-\S+)(?:\.(?:--?|[\da-z-]*[a-z-]\d*|0|[1-9]\d*)){1,100}?)?(?!\.)(?:\+(?:[\da-z]\.?-?){1,100}?(?!\w))?(?!\+)/gi; + return /(?<=^v?|\sv?)(?:(?:0|[1-9]\d{0,9}?)\.){2}(?:0|[1-9]\d{0,9})(?:-(?:--+)?(?:0|[1-9]\d*|\d*[a-z]+\d*)){0,100}(?=$| |\+|\.)(?:(?<=-\S+)(?:\.(?:--?|[\da-z-]*[a-z-]\d*|0|[1-9]\d*)){1,100}?)?(?!\.)(?:\+(?:[\da-z]\.?-?){1,100}?(?!\w))?(?!\+)/gi; } diff --git a/test.js b/test.js index 1b1b7bf..5ebeb75 100644 --- a/test.js +++ b/test.js @@ -226,4 +226,12 @@ test('invalid version does not cause catatrophic backtracking', t => { const difference = Date.now() - start; t.true(difference < 50, `Execution time: ${difference}`); } + + for (let index = 1; index <= 30; index++) { + const start = Date.now(); + const fixture = `0.0.1--${'--'.repeat(index)}\u0000`; + semverRegex().test(fixture); + const difference = Date.now() - start; + t.true(difference < 50, `Execution time: ${difference}`); + } });