Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript: Invalid quantifier in regex

The regex is constructed on the fly, but I've output it to firebug:

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

the error is

invalid quantifier +|$\n?)

I'm not sure where to start.

The actual code is:

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

UPDATE: Per Bennor McCarthy's instructions, I changed the code to this:

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

Firebug still tells me this:

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

ANOTHER UPDATE Looks Like I had to double slash it and this solved the problem!

final code

var regex = new re("(.{1," + len + "})(\\+|\\$\\n?)", "gm");
like image 731
Stephen Avatar asked Sep 14 '10 22:09

Stephen


2 Answers

The problem is the +, which is a quantifier you need to escape.

Use this instead:

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

or inside a string:

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

If you want to match the literal $ followed by a newline, you need to escape the $ with \ (or \\ inside a string - see my last comment below this for an explanation).

Here's some information on quantifiers.

like image 152
Bennor McCarthy Avatar answered Sep 21 '22 14:09

Bennor McCarthy


A quantifier means "how many". The most common is "*" which means zero or more. The quantifier "+" means one or more.

When you get an error about an illegal quantifier it almost always means you have a quantifier where it doesn't belong. For example, since they mean "how many" they must obviously refer to something. If you place one at the start of a pattern or group the regex is thinking "how many _of what?

In your specific case you have a "+" immediately after the grouping character "(" which is why you get the error. You need to either escape the "+" so it isn't treated as a quantifier or put some character or group you want to match in front of it. In your case it is probably the first if you are trying to match an actual "+" character.

like image 45
Bryan Oakley Avatar answered Sep 23 '22 14:09

Bryan Oakley