我有以下javascript代码:
if (url.match(/?rows.*?(?=&)|.*/g)){
urlset= url.replace(/?rows.*?(?=&)|.*/g,"rows="+document.getElementById('rowcount').value);
}else{
urlset= url+"&rows="+document.getElementById('rowcount').value;
}
我在/?rows.*?...
上得到错误invalid quantifier
。在上测试时,这个regex也能正常工作http://www.pagecolumn.com/tool/regtest.htm使用测试字符串
srt=acc_pay&showfileCL=是&shownotaryCL=是&showclientCL=否&showborrowerCL=是&shownotaryStatusCL=是&showclientStatusCL=是&showbillCL=是&showfeeCL=是&showtotalCL=是&dir=asc&关闭日期=12/01/2011&关闭日期2=12/31/2011&sort=notaryname&pageno=0&rows=任意内容&Start=0','bodytable','xyz')
在这个字符串中,上面的regex应该匹配:
行=任何
事实上,我甚至不需要/?
来让它工作,但如果我不把它放在我的javascript中,它就好像它甚至不是regex。。。我对Regex时期很糟糕,所以这次让我很困惑。这个错误是我在Firefox的错误控制台中看到的唯一一个错误。
编辑
使用我上面发布的链接,前导/
似乎试图匹配实际的正斜杠,而不是仅仅将代码标记为regex语句的开头。所以?
在那里,所以如果它与/
不匹配,它无论如何都会继续。
分辨率
好的,所以最后,我不得不把我的正则表达式改为:
/rows=.*(?=\&?)/g
这与单词"rows="后面的任何内容相匹配,直到它达到与号或用完文本为止。
您需要转义第一个?
,因为它在正则表达式中具有特殊含义。
/?rows.*?(?=&)|.*/g
// ^---escaped
regtest.htm生成
new RegExp("?rows.?(?=\\amp;)|.",")返回SyntaxError:无效量词
您在网站中输入的值在正则表达式上不应该有/
分隔符,所以输入?rows.*?(?=&)|.*
也会出现同样的问题。您的JavaScript代码应该看起来像
re = /rows.*?(?=&)|.*/g;
或类似的正则表达式(但这是一个毫无意义的正则表达式,因为它匹配所有内容)。如果您无法修复,请描述您想要匹配的内容,并显示您的JavaScript
您可能会考虑重构代码,使其看起来像这样:
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