JavaScript: неверный квантификатор в регулярном выражении - PullRequest
8 голосов
/ 15 сентября 2010

Регулярное выражение построено на лету, но я вывел его в firebug:

(.{1,38})(+|$\n?)

ошибка

invalid quantifier +|$\n?)

Я не уверен, с чего начать.

Фактический код:

var re = top.RegExp;
var regex = new re("(.{1," + len + "})(+|$\\n?)", "gm");

UPDATE: В соответствии с инструкциями Беннора Маккарти, я изменил код так:

 var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm");

Firebug все еще говорит мне это:

invalid quantifier +|$\n?)
[Break on this error] var regex = new re("(.{1," + len + "})(\+|\$\\n?)", "gm"); 

ДРУГОЕ ОБНОВЛЕНИЕ Похоже, мне пришлось удвоить его, и это решило проблему!

окончательный код

var regex = new re("(.{1," + len + "})(\\+|\\$\\n?)", "gm");

Ответы [ 2 ]

12 голосов
/ 15 сентября 2010

Проблема в +, который является квантификатором, который вы должны экранировать.

Используйте это вместо:

/(.{1,38})(\+|$\n?)/

или внутри строки:

"(.{1,38})(\\+|$\\n?)"

Если вы хотите сопоставить литерал $, за которым следует символ новой строки, вам нужно экранировать $ с \ (или \\ внутри строки - см. Мой последний комментарий ниже для объяснения).

Вот некоторая информация о квантификаторах .

3 голосов
/ 15 сентября 2010

Квантификатор означает «сколько».Наиболее распространенным является «*», что означает ноль или более.Квантификатор «+» означает один или несколько.

Когда вы получаете ошибку о недопустимом квантификаторе, это почти всегда означает, что у вас есть квантификатор, к которому он не принадлежит.Например, поскольку они означают «сколько», они, очевидно, должны ссылаться на что-то.Если вы поместите один в начало шаблона или группы, регулярное выражение будет думать, «сколько _ чего?»

В вашем конкретном случае у вас есть «+» сразу после символа группировки »(« именно поэтому выполучите ошибку. Вам нужно либо экранировать знак «+», чтобы он не считался квантификатором, либо поставить перед ним символ или группу, которой вы хотите соответствовать. В вашем случае это, вероятно, первый случай, если вы пытаетесьсоответствует действительному символу «+».

...