我试图在字母之后和美元符号之前检索数字。在运行代码时,我一直接收"null“作为输出。
例如:来自VOO2.1315$262.67$86.88$559.88DIS1.94733$104.45$27.77$203.40IWM1.07511$122.55...的数字2.1315,1.94733,1.07511
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);发布于 2020-04-21 20:32:35
我使用字符串进行了数字转换,如果不需要,则删除.map(Number)
在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正则表达式中的查找。你必须使用两个正则表达式
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 ]发布于 2020-04-21 20:48:40
基本上是找一个字母,后面跟着一些数字,然后是小数点,然后是一些更多的数字。然后,对于这些条目中的每一个,去掉位于第一个位置的字母。
found = data.match(/[a-zA-Z]\d+\.\d+/g).map(m => Number(m.substr(1)));found是您要寻找的值的数组。
如果您只想要字符串值,就不要使用Number()强制转换。
https://stackoverflow.com/questions/61352575
复制相似问题