【问题标题】:How to retrieve numbers from data using regex?如何使用正则表达式从数据中检索数字?
【发布时间】:2020-08-04 17:35:40
【问题描述】:

我正在尝试检索字母之后和美元符号之前的数字。当我运行我的代码时,我一直收到“null”作为输出。

例如:来自 VOO 的数字 2.1315、1.94733、1.075112.1315$262.67$86.88$559.88DIS1.94733$104.45$27.77$203.40IWM1.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);

【问题讨论】:

  • 您正在使用锚来断言字符串的开头^ 和结尾$。使用模式 \d+\.\d{0,2} 将匹配点后的 0-2 位数字,并且不会完全匹配 2.1315 您是否只想匹配字符 a-zA-Z 后的十进制数字?

标签: javascript regex string sorting numbers


【解决方案1】:

我从数字中的字符串进行了转换,如果您不需要,请删除.map(Number)

在 ECMA-262 规范中可以使用 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(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 ]

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

基本上是寻找一个字母后跟一些数字,然后是一个小数点,然后是一些更多的数字。然后对于这些条目中的每一个,去掉位于第一个位置的字母。

found = data.match(/[a-zA-Z]\d+\.\d+/g).map(m => Number(m.substr(1)));

found 是您要查找的值的数组。

如果您只想要字符串值,请摆脱 Number() 演员表。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2010-10-16
    • 1970-01-01
    • 2018-03-02
    • 2016-06-29
    • 1970-01-01
    • 2019-11-01
    • 2013-10-03
    • 2016-09-01
    相关资源
    最近更新 更多