javascript - 如何使用正则表达式从数据中检索数字?
问题描述
我正在尝试在字母之后和美元符号之前检索数字。当我运行我的代码时,我一直收到“null”作为输出。
例如:数字 2.1315、1.94733、1.07511 来自 VOO 2.1315 $262.67$86.88$559.88DIS 1.94733 $104.45$27.77$203.40IWM 1.07511 $122.55...
var data = "VOO2.1315$262.67$86.88$559.88DIS1.94733$104.45$27.77$203.40IWM1.07511$122.55$14.98$131.75DAL5$24.04-$44.26$120.19XOM2$42.46-$18.40$84.92VYM1$77.59$7.15$77.59SBUX1.19403$76.64$15.12$91.51";
var regex = /^\d+\.\d{0,2}$/g;
var found = data.match(regex);
console.log(found);
console.log(data);
解决方案
我从数字中的字符串进行转换,如果您不需要,则删除.map(Number)
Lookbehind 断言它在 ECMA-262 规范中可用
const data = 'VOO2.1315$262.67$86.88$559.88DIS1.94733$104.45$27.77$203.40IWM1.07511$122.55$14.98$131.75DAL5$24.04-$44.26$120.19XOM2$42.46-$18.40$84.92VYM1$77.59$7.15$77.59SBUX1.19403$76.64$15.12$91.51';
const regex = /(?<=[a-z])\d+\.\d+(?=\$)/gi;
const numbers = data
.match(regex)
.map(Number);
console.log(numbers);
较旧的浏览器不支持 JavaScript 正则表达式中的lookbehind。你必须使用两个正则表达式
const data = 'VOO2.1315$262.67$86.88$559.88DIS1.94733$104.45$27.77$203.40IWM1.07511$122.55$14.98$131.75DAL5$24.04-$44.26$120.19XOM2$42.46-$18.40$84.92VYM1$77.59$7.15$77.59SBUX1.19403$76.64$15.12$91.51';
const regex = /[a-z](\d+\.\d+)\$/gi;
const numbers = data
.match(regex)
.map(item => item.match(/\d+\.\d+/))
// or you can use slice instead of regex
// .map(item => item.slice(1, -1))
.map(Number);
console.log(numbers);
输出:
Array(25) [ 2.1315, 1.94733, 1.07511 1.19403 ]
推荐阅读
- excel - 在溢出范围旁边展开公式
- neo4j - 如何在 Neo4J 3.3.9 中快速找到节点 - 密码查询优化
- sql - 如何将 ER-D 非规范化为最终用户的报告视图?
- azure - '错误[ERR_STREAM_CANNOT_PIPE]:无法管道,不可读'在saucelabs中运行testcafe测试用例时面临此错误
- android - 如何在android中创建带有工具提示箭头的弹出菜单或弹出窗口
- r - 如何转换数据框,使值在 R 中每列向下移动一行?
- reactjs - 通过 __ref id 查找 apollo 缓存项
- spring-boot - Spring Boot 安全性未按预期工作
- batch-file - 当图标位于快捷方式旁边时如何为快捷方式文件创建图标
- javascript - 如何删除 x 轴刻度标签 Chart.Js