有很多相关的正则表达式问题,但没有一个能解决我的问题,因为我的表达式中没有括号。
我有一个字符串数学表达式,例如:1*2+3-99/50
我需要对表达式进行标记以将表达式转换为后修复表示法。所以我将 split 与正则表达式一起使用,如下所示:
'1*2+3-99/50'.split(/([+\-*/])/) // operands have no unary (-)
// ['1', '*', '2', '+', '3', '-', '99', '/', '50']
效果很好。但与一元运算符一起使用时,它不起作用。所以我尝试使用lookahead来检测减号是否出现在另一个运算符之后:
'1*-2+-3--99/-50'.split(/([+\-*/])(?=-)/ // all operands have unary (-)
// ['1', '*', '-2', '+', '-3', '-', '-99', '/', '-50']
这也有效,但只是因为所有数字都已经有负号。
我尝试首先使用一元 (-) 运算符捕获操作数,将其附加到最终标记,但我丢失了在评估阶段很重要的顺序。还尝试阅读有关条件正则表达式的内容,但对我来说没有多大意义。
是否可以在一次拆分中拆分包含负号的标记?
最佳答案
尝试使用 \b
进行拆分
var a = '1*-2+-3-99/-50'.split(/(\b[-+*/])/);
console.log(JSON.stringify(a))
关于javascript - 使用正则表达式进行一元运算符拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59400812/