aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrmr19932015-09-11 13:26:31 +0100
committermrmr19932015-09-11 13:26:31 +0100
commitce2809a76e08780955198c11fc63eb990cd575cf (patch)
tree49a07e27b9f87c07bc6986507e8187158f101b1e
parent4e5b82e3783bebe640ce98df4bd432da7640c69d (diff)
downloadvimium-ce2809a76e08780955198c11fc63eb990cd575cf.tar.bz2
Move escaping regex special chars to its own utility function
-rw-r--r--background_scripts/completion.coffee4
-rw-r--r--content_scripts/mode_find.coffee5
-rw-r--r--lib/utils.coffee6
3 files changed, 8 insertions, 7 deletions
diff --git a/background_scripts/completion.coffee b/background_scripts/completion.coffee
index fb5a6120..2427bad8 100644
--- a/background_scripts/completion.coffee
+++ b/background_scripts/completion.coffee
@@ -762,8 +762,6 @@ RegexpCache =
init: ->
@initialized = true
@clear()
- # Taken from http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
- @escapeRegExp ||= /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
clear: -> @cache = {}
@@ -777,7 +775,7 @@ RegexpCache =
# TODO: `prefix` and `suffix` might be useful in richer word-relevancy scoring.
get: (string, prefix="", suffix="") ->
@init() unless @initialized
- regexpString = string.replace(@escapeRegExp, "\\$&")
+ regexpString = Utils.escapeRegexSpecialCharacters string
# Avoid cost of constructing new strings if prefix/suffix are empty (which is expected to be a common case).
regexpString = prefix + regexpString if prefix
regexpString = regexpString + suffix if suffix
diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee
index 9b47cfbd..8c4286ae 100644
--- a/content_scripts/mode_find.coffee
+++ b/content_scripts/mode_find.coffee
@@ -132,10 +132,7 @@ class FindMode extends Mode
# show a the number of results. We can grep on document.body.innerText, as it should be indistinguishable
# from the internal representation used by window.find.
else
- # escape all special characters, so RegExp just parses the string 'as is'.
- # Taken from http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
- escapeRegExp = /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
- parsedNonRegexQuery = @query.parsedQuery.replace(escapeRegExp, (char) -> "\\" + char)
+ parsedNonRegexQuery = Utils.escapeRegexSpecialCharacters @query.parsedQuery
pattern = new RegExp(parsedNonRegexQuery, "g" + (if @query.ignoreCase then "i" else ""))
text = document.body.innerText
@query.matchCount = text.match(pattern)?.length
diff --git a/lib/utils.coffee b/lib/utils.coffee
index 90469fad..e0b9ba36 100644
--- a/lib/utils.coffee
+++ b/lib/utils.coffee
@@ -19,6 +19,12 @@ Utils =
func = obj[components.pop()]
func.apply(obj, argArray)
+ # Escape all special characters, so RegExp will parse the string 'as is'.
+ # Taken from http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+ escapeRegexSpecialCharacters: do ->
+ escapeRegex = /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
+ (str) -> str.replace escapeRegex, "\\$&"
+
escapeHtml: (string) -> string.replace(/</g, "&lt;").replace(/>/g, "&gt;")
# Generates a unique ID