Javascript регулярное выражение недопустимая ошибка квантификатора - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть следующий код 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 & showe = yes & show = yes & yes = yes & showfell & show & show & yes> yes & showfellasc & ClosingDate = 12/01/2011 & ClosingDate2 = 12/31/2011 & sort = notaryname & pageno = 0 & rows = everything & Start = 0 ',' bodytable ',' xyz ')

В этой строке предполагается, что приведенное выше регулярное выражениеmatch:

строки = что-нибудь

На самом деле мне даже не нужно /?, чтобы заставить его работать, но если я не положу это в свойjavascript, он действует так, как будто он даже не является регулярным выражением ... Я ужасен с периодом регулярного выражения, так что это меня сильно смущает.И эта ошибка является единственной, которую я получаю в консоли ошибок Firefox.

РЕДАКТИРОВАТЬ

Используя эту ссылку, которую я разместил выше, кажется, что ведущая / пытаетсячтобы соответствовать действительному наклонному слешу вместо того, чтобы просто пометить код как начало оператора регулярного выражения.Таким образом, ? находится там, так что если он не соответствует / ни с чем, он все равно продолжается.

РАЗРЕШЕНИЕ

Хорошо, так что вВ конце я должен был изменить свое регулярное выражение на это:

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

Это соответствовало слову "строки"= "сопровождается чем-либо, пока не достигнет амперсанда или не закончится текст.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

Вам нужно экранировать первый ?, поскольку он имеет особое значение в регулярном выражении.

2 голосов
/ 02 февраля 2012

regtest.htm производит

new RegExp ("? Row. ? (? = \ &) |. ", "") возвратил SyntaxError: неверный квантор

Значение, которое вы вводите на веб-сайт, не должно иметь разделителей / в регулярном выражении, поэтому введите ?rows.*?(?=\&)|.*, и это показывает ту же проблему. Ваш код JavaScript должен выглядеть как

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

или подобное (но это бессмысленное регулярное выражение, поскольку оно соответствует всему). Если вы не можете это исправить, опишите, что вы хотите сопоставить, и покажите свой JavaScript

0 голосов
/ 02 февраля 2012

Вы можете подумать о рефакторинге своего кода, чтобы он выглядел примерно так:

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

...