匹配数学表达式的JavaScript正则表达式

匹配数学表达式的JavaScript正则表达式,javascript,regex,Javascript,Regex,我需要有关此正则表达式的帮助: 让j=numberArray.join.match/^[\d]*\.{1,}[\d]+\d]+\124;[-+*/]?=\.[\ d]\.[\d]+\d]+/g 这是我需要匹配的标准: 一个数字不能有多个小数。例如,只允许使用.123或1.123等数字,但不允许使用…33或1.2.3.3。 运算符后面不能有一个或多个附加运算符。因此,用户不能连续输入一个+后跟一个*。 输入和输出示例如下: 输入:..123+*/.4.3.5-+..3+123 将产生输出:.123

我需要有关此正则表达式的帮助:

让j=numberArray.join.match/^[\d]*\.{1,}[\d]+\d]+\124;[-+*/]?=\.[\ d]\.[\d]+\d]+/g

这是我需要匹配的标准:

一个数字不能有多个小数。例如,只允许使用.123或1.123等数字,但不允许使用…33或1.2.3.3。 运算符后面不能有一个或多个附加运算符。因此,用户不能连续输入一个+后跟一个*。 输入和输出示例如下:

输入:..123+*/.4.3.5-+..3+123

将产生输出:.123/.435+.3+123


实际上,我认为我有关于所有操作符的第二个标准,但我一直在努力解决小数点的问题。我对正则表达式还不熟悉,正在尽我最大的努力破解它,但过了一段时间,它开始影响我了。非常感谢您的帮助

如果您单独执行这些操作,逻辑可能会更简单-首先查找具有多个小数的数字,并对其进行修正,使其仅包含小数点后的第一位,然后查找重复运算符,并将其替换为最终运算符:

const clean=str=>str //匹配零个或多个数字,后跟一个小数, //后跟更多的数字和十进制字符 //对于超过第一个小数点的所有内容,用空字符串替换小数点 代替 /\d*\.[\d.]+/g, _,g1,g2=>g1+g2。替换/\./g, //匹配2个或多个运算符,捕获组中的最后一个运算符 //替换为最后捕获的操作员 代替 /[-+/*]{2,}/g, '$1' ;
控制台.logclean'..123+*/.4.3.5-+..3+123' 如果您单独执行这些操作,逻辑可能会更简单-首先查找具有多个小数的数字,并对其进行修正,使其仅包含小数点后的第一位,然后查找重复运算符,并将其替换为最终运算符:

const clean=str=>str //匹配零个或多个数字,后跟一个小数, //后跟更多的数字和十进制字符 //对于超过第一个小数点的所有内容,用空字符串替换小数点 代替 /\d*\.[\d.]+/g, _,g1,g2=>g1+g2。替换/\./g, //匹配2个或多个运算符,捕获组中的最后一个运算符 //替换为最后捕获的操作员 代替 /[-+/*]{2,}/g, '$1' ;
控制台.logclean'..123+*/.4.3.5-+..3+123';撇开这一点不谈,..123可能应该被视为一个错误,而不是像.4.3.5一样被解析为0.123,您还有其他问题。这将导致一些奇怪的歧义。例如,在序列+*/中给出的示例中,完全不清楚为什么要选择“/”或“*”,或者为什么完全忽略-符号。在普通数学中,-+3应该是-3,而不是+3。为了简化我之前的评论:如果某些输入是不允许的,例如…3或+*,为什么要尝试理解这些输入,而不是拒绝它们?拒绝这些无意义的输入,然后解析任何可接受的输入要比试图理解这些无意义的输入容易得多。撇开这一点不谈,..123应该被视为一个错误,而不是像.4.3.5一样解析为0.123,您还有其他问题。这将导致一些奇怪的歧义。例如,在序列+*/中给出的示例中,完全不清楚为什么要选择“/”或“*”,或者为什么完全忽略-符号。在普通数学中,-+3应该是-3,而不是+3。为了简化我之前的评论:如果某些输入是不允许的,例如…3或+*,为什么要尝试理解这些输入,而不是拒绝它们?拒绝这些无意义的输入,然后解析任何可接受的输入,要比试图理解这些废话容易得多。噢,伙计,非常感谢!我试着一次完成所有的工作,但是分解它显然要容易得多。哦,老兄,非常感谢你!我试着一次完成所有的工作,但是分解它显然要容易得多。