正则表达式错误:无需重复

时间:2014-06-12 03:18:57

标签: javascript regex

我是JavaScript中的正则表达式的新手,我无法使用正则表达式。错误是:

  

Uncaught SyntaxError:无效的正则表达式:/(.*+x.*+)\=(.++)/:无需重复

我知道除此之外还有很多这样的问题,但我不能根据其他人的答案和建议来解决这个问题。

正则表达式是:

/(.*+x.*+)\=(.++)/

用于将简单方程与一侧的变量x进行匹配。

它应该匹配的表达式的一些例子是(我正在编写一个简单的程序来解决变量x):

  • 240x=70

  • x+70=23

  • 520/x=2

  • 13989203890189038902890389018930.23123213281903890128390x+23123/2=3

我正在尝试占有量词(*+),因为之前,表达式是贪婪的并且使我的浏览器崩溃了,但是现在出现了我没有遇到过的错误。

我确信它与逃避没有关系,这对许多其他人来说是个问题。

3 个答案:

答案 0 :(得分:3)

您可以使用javascript模拟possessive quantifier(因为您可以模拟atomic group同样的事情):

a++ => (?>a+) => (?=(a+))\1

这个技巧使用了这样一个事实:一旦正则表达式引擎达到右括号,lookahead assertion (?=...)的内容就变成了原子。如果你把一个捕获组放在里面(你想要原子或占有欲),你只需要在捕获组之后添加backreference \1

关于您的模式:

.*+x是一个永远错误的断言(如.*+=):因为.*是贪婪的,它会匹配所有可能的字符,如果你使它具有占有性.*+,正则表达式引擎无法回溯以匹配“x”之后。

你能做什么:

我建议更明确地描述可以包含每个捕获组的内容,而不是使用含糊的.*。我不认为你需要占有率来完成这项任务。

尝试将字符串拆分为运算符也是一个好主意,并避免构建过于复杂的模式。

答案 1 :(得分:1)

Javascript正则表达式不支持占有量词。您应该尝试使用不情愿的(非贪婪的):*?+?

答案 2 :(得分:0)

试试这个,它会将左手侧和右手侧分开:

(.*x.*)=(.+)

Live demo