Извлечь номер из объяснения строки - PullRequest
0 голосов
/ 27 марта 2020

Я искал способ извлечь число / число из строки. Пример:

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

и я нашел решение на этом сайте. Проблема в том, что я не очень хорошо понимаю. Может кто-нибудь объяснить мне, что на самом деле произошло в строке ниже?

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

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Для начала .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) будет повторяться для каждого строкового элемента в Массив совпадений (все совпадения являются строками, потому что это было первое) и приводит к нумерации с помощью функции 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

0 голосов
/ 27 марта 2020

Регулярное выражение:

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

будет соответствовать подстрокам, которые:

  • [+-]? - могут начинаться с + или - (набор символов, опционально: ?)
  • \d+ - затем содержит один или несколько символов di git (цифры от 0 до 9)
  • (?:\.\d+)? - без захвата группа, необязательная ?:
    • \.\d+ - может соответствовать литералу ., за которым следуют дополнительные символы git

Единственная часть шаблона, которую не использует , используемая вашим вводом, - это десятичная часть в конце. Например, в строке

foo +12.34

он будет соответствовать +12.34.

Регулярное выражение соответствует извлеченным подстрокам из большей строки в виде массива. .map(Number) использует Array.prototype.map для преобразования всех элементов одного массива в другой массив - он превращает массив строк в массив чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...