I\'m new to regular expressions in JavaScript, and I cannot get a regex to work. The error is:
Uncaught SyntaxError: Invalid regular expression:
/(.
Javascript regular expressions don't support possessive quantifiers. You should try with the reluctant (non-greedy) ones: *?
or +?
Try this, it will seperate the left hand side and the right hand side:
(.*x.*)=(.+)
Live demo
You can emulate a possessive quantifier with javascript (since you can emulate an atomic group that is the same thing):
a++ => (?>a+) => (?=(a+))\1
The trick use the fact that the content of a lookahead assertion (?=...)
becomes atomic once the closing parenthesis reached by the regex engine. If you put a capturing group inside (with what you want to be atomic or possessive), you only need to add a backreference \1
to the capture group after.
About your pattern:
.*+x
is an always false assertion (like .*+=
): since .*
is greedy, it will match all possible characters, if you make it possessive .*+
, the regex engine can not backtrack to match the "x" after.
What you can do:
Instead of using the vague .*
, I suggest to describe more explicitly what can contain each capture group. I don't think you need possessive quantifiers for this task.
Trying to split the string on operator can be a good idea too, and avoids to build too complex patterns.