javascript中使用regex函数的语法错误

时间:2017-07-21 21:22:41

标签: javascript regex

这是html5横幅的一段简单代码,适用于特定的广告投放平台,但在Chrome中运行时会出现错误。

错误是: index.html:5 Uncaught SyntaxError: Invalid regular expression: missing /

我在阅读这种正则表达式代码时并不是一个高手。任何人都可以找出问题所在吗?

function getParameterByName(name){
    name=name.replace(/[\/, "\\[").replace(/[\]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + '=([^&#]*)"),results = regex.exec(location.search); return results === null ? "":decodeURIComponent(results[1].replace(/\+/g, " "));
    }
    var clickTAG = getParameterByName("clickTAG");

我发现了一段非常相似的代码,不会引发错误:

function getParameterByName(name) {
   name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
   var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
       results = regex.exec(location.search);
   return results === null ? "" :
       decodeURIComponent(results[1].replace(/\+/g, " "));
 }

区别在于这一行 name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - 工作 name = name.replace(/[\/, "\\[").replace(/[\]/, "\\]"); - 无法正常工作

区别是什么? []的含义是什么,并添加了额外的]

2 个答案:

答案 0 :(得分:2)

你的第一行代码有问题,它没有关闭/,然后第二行没有正确的封闭字符串,试试这段代码,它可以正常工作

function getParameterByName(name){
    name=name.replace(/[\/]/, "\\[").replace(/\[\]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + '=([^&#]*)'),results = regex.exec(location.search); return results === null ? "":decodeURIComponent(results[1].replace(/\+/g, " "));
    }
    var clickTAG = getParameterByName("clickTAG");

答案 1 :(得分:1)

编辑:在你的正则表达式构造函数中替换'with'

new RegExp("[\\?&]" + name + '=([^&#]*)"),

------------------------------------------ ^这个字符在箭头上方应该是“

'=([^&#] *)“此元素不在”“中,也不在''。

根据您发布的代码:

new RegExp("[\\?&]" + name + '=([^&#]*)") // your code
new RegExp("[\\?&]" + name + "=([^&#]*)") // working code

很容易发现差异