From 674e8e7e07ece489fc8d60bcf3bb400825f331f4 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 29 Jan 2021 11:49:27 +0200 Subject: [PATCH] escape certain characters before searching --- .../src/components/findAndReplace/helpers.js | 6 +++++- .../src/findAndReplace/FindAndReplacePlugin.js | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/wax-prosemirror-components/src/components/findAndReplace/helpers.js b/wax-prosemirror-components/src/components/findAndReplace/helpers.js index 3860959bc..88c373fec 100644 --- a/wax-prosemirror-components/src/components/findAndReplace/helpers.js +++ b/wax-prosemirror-components/src/components/findAndReplace/helpers.js @@ -37,7 +37,7 @@ const findMatches = (doc, searchValue, matchCase) => { } }); mergedTextNodes.forEach(({ text, pos }) => { - const search = RegExp(searchValue, matchCase ? 'gu' : 'gui'); + const search = RegExp(escapeRegExp(searchValue), matchCase ? 'gu' : 'gui'); let m; // eslint-disable-next-line no-cond-assign while ((m = search.exec(text))) { @@ -54,6 +54,10 @@ const findMatches = (doc, searchValue, matchCase) => { return results; }; +const escapeRegExp = string => { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +}; + const getMatchesByView = (views, searchValue, matchCase) => { let allResults = 0; each(views, (singleView, viewId) => { diff --git a/wax-prosemirror-plugins/src/findAndReplace/FindAndReplacePlugin.js b/wax-prosemirror-plugins/src/findAndReplace/FindAndReplacePlugin.js index 3eafc6437..403d39293 100644 --- a/wax-prosemirror-plugins/src/findAndReplace/FindAndReplacePlugin.js +++ b/wax-prosemirror-plugins/src/findAndReplace/FindAndReplacePlugin.js @@ -42,7 +42,7 @@ const findMatches = (doc, searchValue) => { } }); mergedTextNodes.forEach(({ text, pos }) => { - const search = RegExp(searchValue, matchCase ? 'gu' : 'gui'); + const search = RegExp(escapeRegExp(searchValue), matchCase ? 'gu' : 'gui'); let m; // eslint-disable-next-line no-cond-assign while ((m = search.exec(text))) { @@ -59,6 +59,10 @@ const findMatches = (doc, searchValue) => { return results; }; +const escapeRegExp = string => { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +}; + export default props => { return new Plugin({ key: findAndReplacePlugin, -- GitLab