-1

我有以下 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=no&showborrowerCL=yes&shownotaryStatusCL=yes&showclientStatusCL=yes&showbillCL=yes&showfeeCL=yes&showtotalCL=yes&dir=asc&closureDate=12/01/2011&closureDate2=12/31/2011&sort=notarystart&='tablename&=' 'xyz')

在这个字符串中,上面的正则表达式应该匹配:

行=任何东西

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

编辑

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

解析度

好的,所以最后,我不得不将我的正则表达式更改为:

/rows=.*(?=\&?)/g

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

4

3 回答 3

4

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

   /\?rows.*?(?=\&)|.*/g
//   ^---escaped
于 2012-02-01T22:23:12.867 回答
2

regtest.htm 产生

new RegExp("?rows. ?(?=\&)|. ", "") 返回了 SyntaxError: invalid quantifier

您输入网站的值不应该/在正则表达式上有分隔符,所以输入?rows.*?(?=\&)|.*它会显示同样的问题。您的 JavaScript 代码应如下所示

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

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

于 2012-02-01T23:18:45.123 回答
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

于 2012-02-01T23:53:56.920 回答