正则表达式语法错误

use*_*152 6 javascript regex

我正在动态创建一个正则表达式.

    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}$

Wik*_*żew 5

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构造函数的参数中的特殊字符(例如.必须\\.).


Poi*_*nty 1

JavaScript 不支持lookbehind 组。

最重要的是,你的正则表达式是由字符串构建的。您必须确保您的正则表达式元字符在字符串常量解析过程中“生存”,特别是您的\s需要表示为\\s.

另请注意,.如果您不在模式的 URL 部分中加上前缀,则这些字符将被解释为正则表达式“通配符”符号\\

最后,尚不清楚您期望这些{1}事情做什么;在 JavaScript 中将匹配字符序列{1}