Fix handling of backslashes in string expressions for :has-text()

This commit is contained in:
Raymond Hill 2019-04-15 18:56:28 -04:00
parent a594b3f3d1
commit 60858b6719
No known key found for this signature in database
GPG key ID: 25E1490B761470C2

View file

@ -173,14 +173,17 @@
')\\(' ')\\('
].join('')); ].join(''));
const reEscapeRegex = /[.*+?^${}()|[\]\\]/g, const reEatBackslashes = /\\([()])/g;
reNeedScope = /^\s*[+>~]/, const reEscapeRegex = /[.*+?^${}()|[\]\\]/g;
reIsDanglingSelector = /(?:[+>~]\s*|\s+)$/; const reNeedScope = /^\s*[+>~]/;
const reIsDanglingSelector = /(?:[+>~]\s*|\s+)$/;
const regexToRawValue = new Map(); const regexToRawValue = new Map();
let lastProceduralSelector = '', let lastProceduralSelector = '',
lastProceduralSelectorCompiled; lastProceduralSelectorCompiled;
// When dealing with literal text, we must first eat _some_
// backslash characters.
const compileText = function(s) { const compileText = function(s) {
const match = reParseRegexLiteral.exec(s); const match = reParseRegexLiteral.exec(s);
let regexDetails; let regexDetails;
@ -191,7 +194,8 @@
regexDetails = [ regexDetails, match[2] ]; regexDetails = [ regexDetails, match[2] ];
} }
} else { } else {
regexDetails = s.replace(reEscapeRegex, '\\$&'); regexDetails = s.replace(reEatBackslashes, '$1')
.replace(reEscapeRegex, '\\$&');
regexToRawValue.set(regexDetails, s); regexToRawValue.set(regexDetails, s);
} }
return regexDetails; return regexDetails;