diff --git a/packages/utilities/src/utilities.ts b/packages/utilities/src/utilities.ts index 892395172..50efccb3c 100644 --- a/packages/utilities/src/utilities.ts +++ b/packages/utilities/src/utilities.ts @@ -429,3 +429,10 @@ export async function timeoutPromise(promise: Promise, timeoutMillis: numb timeout = setTimeout(() => callback(new Error(errorMessage)), timeoutMillis) as unknown as number; }); } + +/** + * Removes the leading ^ and trailing $ from regex + */ +export function createInjectableRegExp(regex: RegExp) { + return new RegExp(regex.source.replace(/^\^|\$$/g, '')); +} diff --git a/test/utilities.test.ts b/test/utilities.test.ts index 4f4552e56..07ad49b3b 100644 --- a/test/utilities.test.ts +++ b/test/utilities.test.ts @@ -398,3 +398,21 @@ describe('BetterSetInterval', () => { expect(fn).toHaveBeenCalledTimes(4); }); }); + +describe('createInjectableRegExp()', () => { + it('works with leading ^ and trailing $', () => { + expect(utils.createInjectableRegExp(/^[\w._~]+$/)).toStrictEqual(/[\w._~]+/); + }); + + it('works with leading ^', () => { + expect(utils.createInjectableRegExp(/^[\w._~]+/)).toStrictEqual(/[\w._~]+/); + }); + + it('works with trailing $', () => { + expect(utils.createInjectableRegExp(/[\w._~]+$/)).toStrictEqual(/[\w._~]+/); + }); + + it('works when regex is already injectable', () => { + expect(utils.createInjectableRegExp(/[\w._~]+/)).toStrictEqual(/[\w._~]+/); + }); +});