diff --git a/src/utils.js b/src/utils.js index dd0eaa8..5b4b03a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -27,9 +27,10 @@ function memoize(fn) { * @return {string} */ const reduceCSSSelector = memoize((selector) => { - return selector.split( - /:(?=([^"'\\]*(\\.|["']([^"'\\]*\\.)*[^"'\\]*['"]))*[^"']*$)/g - )[0]; + selector = selector.replace('\\:', '_ESCAPED_COLON_'); + return selector + .split(/:(?=([^"'\\]*(\\.|["']([^"'\\]*\\.)*[^"'\\]*['"]))*[^"']*$)/g)[0] + .replace('_ESCAPED_COLON_', '\\:'); }); /** diff --git a/tests/utils.test.js b/tests/utils.test.js index 34a31dc..13b1b20 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -20,6 +20,10 @@ test('Test reduceCSSSelector', async () => { expect(f("a[href^='javascript:']:after")).toEqual("a[href^='javascript:']"); }); +test('Test backslash selectors', async () => { + expect(utils.reduceCSSSelector('foo\\:hover')).toEqual('foo\\:hover'); +}); + test('Test parentSelectors', async () => { const f = utils.getParentSelectors; // Simplest possible