我是JavaScript中的正则表达式的新手,我无法使用正则表达式。错误是:
Uncaught SyntaxError:无效的正则表达式:
/(.*+x.*+)\=(.++)/
:无需重复
我知道除此之外还有很多这样的问题,但我不能根据其他人的答案和建议来解决这个问题。
正则表达式是:
/(.*+x.*+)\=(.++)/
用于将简单方程与一侧的变量x
进行匹配。
它应该匹配的表达式的一些例子是(我正在编写一个简单的程序来解决变量x
):
240x=70
x+70=23
520/x=2
13989203890189038902890389018930.23123213281903890128390x+23123/2=3
等
我正在尝试占有量词(*+
),因为之前,表达式是贪婪的并且使我的浏览器崩溃了,但是现在出现了我没有遇到过的错误。
我确信它与逃避没有关系,这对许多其他人来说是个问题。
答案 0 :(得分:3)
您可以使用javascript模拟possessive quantifier(因为您可以模拟atomic group同样的事情):
a++ => (?>a+) => (?=(a+))\1
这个技巧使用了这样一个事实:一旦正则表达式引擎达到右括号,lookahead assertion (?=...)
的内容就变成了原子。如果你把一个捕获组放在里面(你想要原子或占有欲),你只需要在捕获组之后添加backreference \1
。
关于您的模式:
.*+x
是一个永远错误的断言(如.*+=
):因为.*
是贪婪的,它会匹配所有可能的字符,如果你使它具有占有性.*+
,正则表达式引擎无法回溯以匹配“x”之后。
你能做什么:
我建议更明确地描述可以包含每个捕获组的内容,而不是使用含糊的.*
。我不认为你需要占有率来完成这项任务。
尝试将字符串拆分为运算符也是一个好主意,并避免构建过于复杂的模式。
答案 1 :(得分:1)
Javascript正则表达式不支持占有量词。您应该尝试使用不情愿的(非贪婪的):*?
或+?
答案 2 :(得分:0)