我正在动态创建一个正则表达式。
var link = "www.google.com";
var reg = '^'+link+'{1}|(?<=\s)'+link+'{1}(?=\s)|'+link+'{1}$';
console.log(reg);
var result = new RegExp(reg, 'g');
我收到此错误
Uncaught SyntaxError: Invalid regular expression: /^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$/: Invalid group
这是生成的正则表达式:
^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$
答案 0 :(得分:5)
JavaScript正则表达式引擎不支持所有的后台。
另一件事:你必须在RegExp构造函数中双重转义\
。
您尝试实现的目的是使字符边界处的URL匹配。
尝试使用
RegExp.escape= function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
var reg = '\\b'+RegExp.escape(link)+'\\b';
代码:
RegExp.escape= function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
var link = "www.google.com"
var reg = '\\b'+RegExp.escape(link)+'\\b';
alert(new RegExp(reg, "g"));
&#13;
注意我正在添加RegExp.Escape
以便转义传递给RegExp
构造函数的参数中的特殊字符(例如.
必须为{{1} }})。
答案 1 :(得分:1)
JavaScript不支持lookbehind组。
最重要的是,你的正则表达式是从字符串构建的。你必须确保你的正则表达元字符&#34;幸存&#34;字符串常量解析的过程,特别是您的\s
需要表示为\\s
。
另请注意,模式的URL部分中的.
字符将被解释为正则表达式&#34;通配符&#34;符号,如果你不在\\
之前。
最后,你不清楚你期望那些 {1}
事情做什么;在JavaScript中将匹配字符序列{1}
。