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