Skip to content

Commit e9697cb

Browse files
author
Diogo Franco (Kovensky)
committed
Refactor regexp quoting
1 parent de44175 commit e9697cb

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

lib/dependencies/ContextDependencyHelpers.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@
44
*/
55
var ContextDependencyHelpers = exports;
66

7+
/**
8+
* Escapes regular expression metacharacters
9+
* @param {string} str
10+
* @return string
11+
*/
12+
function quotemeta(str) {
13+
return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&")
14+
}
15+
716
ContextDependencyHelpers.create = function(Dep, range, param, expr, options) {
817
var dep, prefix, postfix, prefixRange, valueRange, idx, context, regExp;
918
if(param.isTemplateString()) {
@@ -19,9 +28,9 @@ ContextDependencyHelpers.create = function(Dep, range, param, expr, options) {
1928
}
2029
// If there are more than two quasis, maybe the generated RegExp can be more precise?
2130
regExp = new RegExp("^" +
22-
prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") +
31+
quotemeta(prefix) +
2332
options.wrappedContextRegExp.source +
24-
postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$");
33+
quotemeta(postfix) + "$");
2534
dep = new Dep(context, options.wrappedContextRecursive, regExp, range, valueRange);
2635
dep.loc = expr.loc;
2736
dep.replaces = [{
@@ -42,9 +51,9 @@ ContextDependencyHelpers.create = function(Dep, range, param, expr, options) {
4251
prefix = "." + prefix.substr(idx);
4352
}
4453
regExp = new RegExp("^" +
45-
prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") +
54+
quotemeta(prefix) +
4655
options.wrappedContextRegExp.source +
47-
postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$");
56+
quotemeta(postfix) + "$");
4857
dep = new Dep(context, options.wrappedContextRecursive, regExp, range, valueRange);
4958
dep.loc = expr.loc;
5059
dep.prepend = param.prefix && param.prefix.isString() ? prefix : null;

0 commit comments

Comments
 (0)