首页 > 解决方案 > 用正则表达式标记一个数学中缀符号字符串

问题描述

我正在尝试将中缀表示法的字符串拆分为标记化列表,最好使用正则表达式。

例如((10 + 4) ^ 2) * 5会返回['(', '(', '10', '+', '4', ')', '^', '2', ')', '*', '5']

目前我只是按字符拆分它,但这不允许我用超过一位数字表示数字。

我尝试tokens = infixString.split("(\d+|[^ 0-9])");了我在网上找到的同样的问题,但我认为它是针对 Java 的,它只是给出了一个只有一个元素的列表,即整个列表infixString

我对正则表达式几乎一无所知,所以任何提示都将不胜感激。谢谢!

标签: javascriptregex

解决方案


这是因为您将字符串传递给split. 如果您使用文字正则表达式,它将输出更接近您期望的内容

infixString.split(/(\d+|[^ 0-9])/)
// Array(23) [ "", "(", "", "(", "", "10", " ", "+", " ", "4", … ]

但是,您可能想要过滤掉一堆空元素和空白

infixString.split(/(\d+|[^ 0-9])/).filter(e => e.trim().length > 0)
// Array(11) [ "(", "(", "10", "+", "4", ")", "^", "2", ")", "*", … ]

根据您在此处定位的 JavaScript/ECMAScript 版本,可能需要调整filter(或函数本身)中的语法。filter


推荐阅读