正则表达式语法错误

时间:2015-05-20 14:43:39

标签: 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');

我收到此错误

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

2 个答案:

答案 0 :(得分:5)

JavaScript正则表达式引擎不支持所有的后台。 另一件事:你必须在RegExp构造函数中双重转义\

您尝试实现的目的是使字符边界处的URL匹配。

尝试使用

RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

var reg = '\\b'+RegExp.escape(link)+'\\b';

代码:

&#13;
&#13;
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;
&#13;
&#13;

注意我正在添加RegExp.Escape以便转义传递给RegExp构造函数的参数中的特殊字符(例如.必须为{{1} }})。

答案 1 :(得分:1)

JavaScript不支持lookbehind组。

最重要的是,你的正则表达式是从字符串构建的。你必须确保你的正则表达元字符&#34;幸存&#34;字符串常量解析的过程,特别是您的\s需要表示为\\s

另请注意,模式的URL部分中的.字符将被解释为正则表达式&#34;通配符&#34;符号,如果你不在\\之前。

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