diff --git a/src/js/misc.js b/src/js/misc.js index 4063d0dcd..db5f35119 100644 --- a/src/js/misc.js +++ b/src/js/misc.js @@ -649,6 +649,10 @@ export function remove_non_ascii(str) { return str.replace(/[^\x20-\x7E]/g, ""); } +export function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + export function cleanTypographySymbols(textToClean) { var specials = { "“": '"', // “ “ diff --git a/src/js/popups/word-filter-popup.js b/src/js/popups/word-filter-popup.js index 7a3c70c0f..79cb583d6 100644 --- a/src/js/popups/word-filter-popup.js +++ b/src/js/popups/word-filter-popup.js @@ -33,12 +33,12 @@ function hide() { async function filter(language) { let filterin = $("#wordFilterPopup .wordIncludeInput").val(); - filterin = filterin.trim(); - filterin = filterin.replace(/ /gi, "|"); + filterin = Misc.escapeRegExp(filterin.trim()); + filterin = filterin.replace(/\s+/gi, "|"); let regincl = new RegExp(filterin, "i"); let filterout = $("#wordFilterPopup .wordExcludeInput").val(); - filterout = filterout.trim(); - filterout = filterout.replace(/ /gi, "|"); + filterout = Misc.escapeRegExp(filterout.trim()); + filterout = filterout.replace(/\s+/gi, "|"); let regexcl = new RegExp(filterout, "i"); let filteredWords = []; let languageWordList = await Misc.getLanguage(language);