javascript - 用正则表达式标记一个数学中缀符号字符串
问题描述
我正在尝试将中缀表示法的字符串拆分为标记化列表,最好使用正则表达式。
例如((10 + 4) ^ 2) * 5
会返回['(', '(', '10', '+', '4', ')', '^', '2', ')', '*', '5']
目前我只是按字符拆分它,但这不允许我用超过一位数字表示数字。
我尝试tokens = infixString.split("(\d+|[^ 0-9])");
了我在网上找到的同样的问题,但我认为它是针对 Java 的,它只是给出了一个只有一个元素的列表,即整个列表infixString
。
我对正则表达式几乎一无所知,所以任何提示都将不胜感激。谢谢!
解决方案
这是因为您将字符串传递给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
推荐阅读
- javascript - dotenv 不适用于无服务器/webpack
- c# - 如何使用 model.id 动态生成 HTML 属性值?
- c# - 如何在选择子句中使用表达式
- spring - 使用 mongo 数据分页提高性能
- jasmine - Karma/Jasmine/PhantomJS “TypeError:_this.handler.handle 不是函数”
- image - 如何在左右隔室(半)中划分大脑分段切片?
- r - 分组数据 R 中的缺失值
- powershell - 查找服务和流程
- ssl - GlassFish 5 有效的 SSL 证书慢速 https 错误尝试刷新数据时超出写入超时
- android - 通过捏而不是活动旋转视图时 getX() 和 getY() 的值错误