Пустое значение, если соответствие регулярному выражению не найдено JavaScript - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь извлечь любые текстовые символы в начале и следующие два числа строки. Если строка начинается с цифры, я хотел бы получить вместо нее пустое строковое значение, чтобы результирующий массив все еще содержал 3 значения.


Строка: 'M2.55X.45'

Код: 'M2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)

Ожидаемый: ["M", "2.55", ".45"]

Фактический (правильный): ["M", "2.55", ".45"]


Строка: '2.55X.45'

Код: '2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)

Ожидаемый: ["", "2.55", ".45"]

Фактический: ["2.55", ".45"]

Ответы [ 3 ]

3 голосов
/ 01 апреля 2020

Используйте /^([a-zA-Z]?)(\d*(?:\.\d+)?)[a-zA-Z](\d*(?:\.\d+)?)$/.exec("2.55X.45") вместо. Это возвращает массив, где 1-й элемент является полным соответствием, поэтому вы должны получить доступ к группам с 1 индексом, например, match [1] для 1-го значения. Вы можете попробовать это здесь .

1 голос
/ 01 апреля 2020

Вы можете попробовать этот шаблон

(\D*)(\d+(?:\.\d+))\D+(\.\d+)

enter image description here

let finder = (str) => {
  return (str.match(/^(\D*)(\d+(?:\.\d+))\D+(\.\d+)/) || []).slice(1)
}

console.log(finder('M2.55X.45'))
console.log(finder("2.55X.45"))
1 голос
/ 01 апреля 2020

Ваше текущее регулярное выражение использует альтернативное предложение (|), которое создает различные типы группировки в зависимости от того, какой альтернативный вариант сопоставляется.

Вот пример (немного исправленный), который создает явные группы и создает отдельные группы необязательно.

const regex = /^([a-zA-Z]*)?(\d*(?:\.\d+)?)([a-zA-Z]+)(\d*(?:\.\d+)?)$/

console.log(regex.exec("2.55X.45"))
console.log(regex.exec("M2.55X.45"))

Обратите внимание, что я удалил флаг g, поэтому состояние для регулярного выражения не сохраняется .

I ' мы также использовали exec вместо match до , не сбрасывая группы захвата .

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