JavaScript

Подскажите регулярное выражение. В каждом случае нужно выбрать стоимость или диапазон стоимости и время

Текст для обработки

1) от 1100 руб. / ч
2) до 1900 руб. / 45 мин.
3) от 1200 до 1900 руб. / 90 мин.

Результат поиска, точка с запятой разделяет разные группы результатов:

1) от; 1100; ч
2) до; 1900; 45
3) 1200; 1900; 90

Моя регулярка почему-то работает не правильно:
((от|до)?. (\d{4})){1,2}.+(ч| d{2} )

Это вообще можно сделать одним регулярным выражением?
Зачем захватывать слова "от" и "до", когда можно по индексу результата понять где какое значение? (0 - от, 1 - до, 2 - время). Вряд ли будет строка вида "до ...от .../ ...".
/(\d*)(?: ?до| руб\.) (\d*)(?: руб\. )?\/ (ч|\d+)/gi
Никита Калаев
Никита Калаев
76 656
Лучший ответ
Адильжан Ибраев спасибо) классная идея!
Так

"от 1100 руб. / ч"
.match(/(от (?!.*до) |^до) |\d{4}|(\d{2}|ч) /g).join(';');

"до 1900 руб. / 45 мин."
.match(/(от (?!.*до) |^до) |\d{4}|(\d{2}|ч) /g).join(';');

"от 1200 до 1900 руб. / 90 мин."
.match(/(от (?!.*до) |^до) |\d{4}|(\d{2}|ч) /g).join(';');

< div id='result_1'>< /div>
< div id='result_2'>< /div>
< div id='result_3'>< /div>
< script>
var regexp = /(?:от\s*([\d]+)\s*до\s*([\d]+)\s*руб\.\s*|(от|до) \s*([\d]+)\s*руб\.\s*)\/\s*(ч|\d+)/i;

var text_1 = 'от 1100 руб. / ч';
var text_2 = 'до 1900 руб. / 45 мин.';
var text_3 = 'от 1200 до 1800 руб. / 90 мин.';

var arr_1 = regexp.exec(text_1);
var arr_2 = regexp.exec(text_2);
var arr_3 = regexp.exec(text_3);

document.getElementById('result_1').innerHTML = arr_1[3] === undefined? arr_1[1] + '; ' + arr_1[2] + '; ' + arr_1[5] : arr_1[3] + '; ' + arr_1[4] + '; ' + arr_1[5];
document.getElementById('result_2').innerHTML = arr_2[3] === undefined? arr_2[1] + '; ' + arr_2[2] + '; ' + arr_2[5] : arr_2[3] + '; ' + arr_2[4] + '; ' + arr_2[5];
document.getElementById('result_3').innerHTML = arr_3[3] === undefined? arr_3[1] + '; ' + arr_3[2] + '; ' + arr_3[5] : arr_3[3] + '; ' + arr_3[4] + '; ' + arr_3[5];
< /script>

###############################

Убирай пробелы в тэгах "< " -> "<"