javascript正则表达式无效量词错误

时间:2012-02-01 22:20:48

标签: javascript regex quantifiers

我有以下javascript代码:

if (url.match(/?rows.*?(?=\&)|.*/g)){
        urlset= url.replace(/?rows.*?(?=\&)|.*/g,"rows="+document.getElementById('rowcount').value);
}else{
    urlset= url+"&rows="+document.getElementById('rowcount').value;
}

我在invalid quantifier收到错误/?rows.*?...。使用测试字符串

http://www.pagecolumn.com/tool/regtest.htm上测试时,同样的正则表达式可以正常工作
  

SRT = acc_pay&安培; showfileCL = YES&安培; shownotaryCL = YES&安培; showclientCL =否安培; showborrowerCL = YES&安培; shownotaryStatusCL = YES&安培; showclientStatusCL = YES&安培; showbillCL = YES&安培; showfeeCL = YES&安培; showtotalCL = YES&安培; DIR = ASC&安培; closingDate = 12月1日/ 2011&安培; closingDate2 = 12/31/2011&安培;排序= notaryname&安培;您做生意= 0&安培;行=什么&安培;开始= 0' , 'bodytable', 'XYZ')

在此字符串中,上述正则表达式应匹配:

  

行=任何

我实际上甚至不需要/?来使它工作,但如果我不把它放到我的javascript中,它就像它甚至不是正则表达式...我对Regex很糟糕期间,所以这个让我很困惑。而且这个错误是我在Firefox的错误控制台中唯一获得的错误。

修改

使用上面发布的链接,似乎前导/尝试匹配实际的正斜杠,而不是仅仅将代码标记为正则表达式语句的开头。因此,?就在那里,如果它与/不匹配,那么无论如何都会继续。

解决

好的,最后,我不得不改变我的正则表达式:

  。

/行数= *(?= \&安培;)/ G

这匹配单词“rows =”后跟任何内容,直到它击中&符号或用完文本。

3 个答案:

答案 0 :(得分:4)

你需要转义第一个?,因为它在正则表达式中具有特殊含义。

   /\?rows.*?(?=\&)|.*/g
//   ^---escaped

答案 1 :(得分:2)

regtest.htm生成

  

新的RegExp(“?rows。?(?= \&)|。”,“”)返回一个SyntaxError:无效   量词

您放入网站的价值不应该在正则表达式上有/分隔符,因此请放入?rows.*?(?=\&)|.*并显示相同的问题。您的JavaScript代码应该是

re = /rows.*?(?=\&)|.*/g;

或类似(但这是一个毫无意义的正则表达式,因为它匹配所有东西)。如果您无法修复,请描述您要匹配的内容并显示您的JavaScript

答案 2 :(得分:0)

您可以考虑重构代码,使其看起来像这样:

var url = "sort=notaryname&pageno=0&rows=anything&Start=0"
var rowCount = "foobar";
if (/[\?\&]rows=/.test(url))
{
    url = url.replace(/([\?\&]rows=)[^\&]+/g,"$1"+rowCount);
}
console.log(url);

输出

  

sort=notaryname&pageno=0&rows=foobar&Start=0

相关问题