javascript - 使用正则表达式进行一元运算符拆分

标签 javascript regex split

有很多相关的正则表达式问题,但没有一个能解决我的问题,因为我的表达式中没有括号。

我有一个字符串数学表达式,例如: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/

相关文章:

regex - VIM 语法高亮匹配

javascript - 正则表达式仅匹配字符或空格或两个单词之间的一个点,不允许使用双空格

r - 拆分文本以创建新变量

excel - 使用数组过滤表

python - 如何在Python列表中使用正则表达式

javascript - Angularjs,ng-click,如何将复选框数组放入 MongoDB

javascript - 无法使用 XMLHttpRequest 绘制音频文件的波形

Mysql Regex 从 ipv4 替换 0

javascript - HTML 表单的自定义事件

javascript - node-red 使用仪表板节点显示 mysql 结果