-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&closingDate = 12/01/2011&closingDate2 = 12/31 'xyz')

この文字列では、上記の正規表現は次のように一致するはずです。

rows = anything

私は実際に/?それを機能させるために必要さえありません、しかし私がそれを私の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を返しました:無効な数量詞

/Webサイトに入力する値には、正規表現に区切り文字が含まれていてはならないため、入力?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 に答える