从字符串解释中提取数字



我正在寻找一种从字符串中提取Numbers/Numbers的方法。示例:

const string = "Monthly Weather Review, Volume 129, Issues 9-12"

我在这个网站上找到了一个解决方案。问题是我不是很理解它。有人能解释一下下面这行到底发生了什么吗?

let res = string.match(/[+-]?d+(?:.d+)?/g).map(Number); //return [129, 9, -12]

正则表达式:

[+-]?d+(?:.d+)?

将匹配以下子字符串:

  • [+-]?-可以以+-开头(字符集,由以下?设置为可选(
  • d+-然后,包含一个或多个数字字符(0到9之间的数字(
  • (?:.d+)?-非捕获组,由?设置为可选组:
    • .d+-可以匹配文字.,后面跟更多数字字符

模式中唯一没有被输入使用的部分是末尾的小数部分。例如,在字符串中

foo +12.34

它将匹配CCD_ 10。

正则表达式匹配将较大字符串中的子字符串提取为数组。.map(Number)使用Array.prototype.map将一个数组的所有元素转换为另一个数组——它将字符串数组转换为数字数组。

对于初学者来说,.match(regex)String原型上的一个方法,它给定了一个正则表达式,将执行它并在没有任何匹配的情况下返回结果或null。有关详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

对于正则表达式,/[+-]?d+(?:.d+)?/g:

  • [+-]?可选择匹配+或-
  • d+匹配一个或多个数字
  • (?:.d+)?非捕获组的.后面跟数字(您在这里得到的是十进制值(。这对于?是可选的。看起来他们这里只想要整数
  • /g-g用于全局。所有比赛都回来了

有关正则表达式的详细信息:https://www.rexegg.com/regex-quickstart.html

.map(Number)将迭代matches数组中的每个字符串项(所有匹配都是字符串,因为这是第一件事(,并使用Number()函数强制为数字。

有关Number的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

有关.map的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

相关内容

  • 没有找到相关文章

最新更新