Регулярное выражение для группировки цен и названия товара - PullRequest
0 голосов
/ 05 мая 2020

Рассмотрим следующие примеры:

100k melon 8

200 knife 7k

1.2m maple logs 19

Мне нужно уметь пройти первый строка как одна группа, средние части как другая группа, а последняя часть как последняя группа. ([\d+|k])

Есть ли у кого-нибудь из вас, ветераны, идея, где мне следует go дальше, или объяснение, как я могу найти решение этой проблемы?

К сожалению, Ссылка - Что означает это регулярное выражение? на самом деле не решает мою проблему, поскольку это просто дамп всех различных токенов, которые вы можете использовать. У меня проблемы с тем, чтобы осмысленно собрать все это вместе.

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Вот что я придумал:

([0-9\.]+[a-z]?)\s([a-z\ ]+)\s([0-9\.]+[a-z]?)

enter image description here

и краткий обзор групп:

([0-9\.]+[a-z]?)

соответствует любому числу или точке любое количество раз, плюс необязательная 1-символьная единица, например «k» или «m»

([a-z\ ]+)

соответствует букве и / или пробелам. Это может включать конечный или начальный пробел, что раздражает, но я решил, что этого достаточно.

([0-9\.]+[a-z]?)

то же, что и первая группа.

Три группы разделены пробелом каждый.

0 голосов
/ 05 мая 2020

Хорошо, если я правильно понял ваш вопрос, у вас есть следующая строка '100k melon 8 200 knife 7k 1.2m maple logs 19'. Вы должны создать функцию, которая возвращает .match():

function thrice(str){
  return str.match(/(\d+\.\d+|\d+)\w?\D+(\d+\.\d+|\d+)\w?/g);
}
console.log(thrice('100k melon 8 200 knife 7k 1.2m maple logs 19'));

В противном случае, если вы просто хотите протестировать каждую строку отдельно, вы можете рассмотреть:

function goodCat(str){
  let g = str.match(/^(\d+\.\d+|\d+)\w?\D+(\d+\.\d+|\d+)\w?$/) ? true : false;
  return g;
}
console.log(goodCat('100000k is 777 not enough 5'));
console.log(goodCat('100k melon 8'));
console.log(goodCat('200 knife 7k'));
console.log(goodCat('1.2m maple logs 19'));
0 голосов
/ 05 мая 2020

Решение

Это регулярное выражение выполняет свою работу

^(\S+)\s+(.*)\s+(\S+)$

См. Демонстрацию здесь (Regex101)

Объяснение

  • Явное соответствие непробельным последовательностям в начале и конце строки, соответственно.
  • Остальные - средние части, окруженные последовательностями ws.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...