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