Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбор строки на 3 части (https://javascript.ru/forum/misc/67027-razbor-stroki-na-3-chasti.html)

greengo86 23.01.2017 23:22

Разбор строки на 3 части
 
Добрых вечеров... Бытий час пытаюсь разобрать строку типа:
Премьера, 19-й день, 20.01.17 22:45

Необходимо вытащить всё после второй запятой, т.е. 20.01.17 22:45

Написал:
$pattern = '/(\w+), (d+-\w) (\w+), (\d+.\d+.\d+ \d+:\d+)/i';
$replace = '${3}';
$str = preg_replace($pattern, $replace, $header);


И всё равно в переменной $str выдаёт первоначальный текст((

рони 23.01.2017 23:34

greengo86,
php?

рони 23.01.2017 23:40

greengo86,
var str = 'Премьера, 19-й день, 20.01.17 22:45';
var out = str.replace(/.*,\s/,'');
alert(out)
out = str.match(/[^,]+$/);
alert(out)

laimas 23.01.2017 23:47

Цитата:

Сообщение от рони
php?

Да.

laimas 23.01.2017 23:50

greengo86,
все это как, строку? Ну так explode(',', $header)[2].

greengo86 23.01.2017 23:51

Цитата:

Сообщение от рони (Сообщение 442079)
greengo86,
php?

Да!

Цитата:

Сообщение от Rise (Сообщение 442081)
greengo86, /\d\d\.\d\d\.\d\d\s\d\d\:\d\d/

Rise, так а \d это же цифры???

laimas 23.01.2017 23:55

Зачем вам REG, если можно проще?

greengo86 23.01.2017 23:57

Цитата:

Сообщение от laimas (Сообщение 442083)
greengo86,
все это как, строку? Ну так explode(',', $header)[2].

laimas,
Да, explode это класс, но вот хотелось ругялярками тут пройтись! Или предположим будет строка, где по ', ' не разобьёшь....

Обычную дату сдюжил:
$data = 20.01.2017;
$pattern = '/(\d+).(\d+).(\d+)/i';
$replace = '$3';
$date = preg_replace($pattern, $replace, $data);


А с букавками сложнее

laimas 24.01.2017 00:01

Цитата:

Сообщение от greengo86
Да, explode это класс, но вот хотелось ругялярками тут пройтись!

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

greengo86 24.01.2017 00:03

Цитата:

Сообщение от Rise (Сообщение 442081)
greengo86, /\d\d\.\d\d\.\d\d\s\d\d\:\d\d/

Я имею ввиду, что мне до /\d\d\.\d\d\.\d\d\s\d\d\:\d\d/ написать в $pattern, чтобы у меня preg_replace сработал и выудить группу с только датой, например '$3'. Иначе мне приходит только изначальная строка

greengo86 24.01.2017 00:08

Цитата:

Сообщение от laimas (Сообщение 442091)
Что? Запомните - там где можно обойтись без регулярных выражений, о них нужно забывать. Регулярные выражения для сложных разборов, а если строка и забрать из нее последнее, а как ни крути вы это заказываете в шаблоне, то уж пробел перед датой есть, что вам мешает разбивать по пробелу, и ltrim запятую слева?

Понял Вас. Ничего не мешает пройти по пробелу, но просто совсем не имел дело с регулярками и знаю и что ими не всегда и не везде можно пользоваться. Ок, спасибо

laimas 24.01.2017 00:17

Цитата:

Сообщение от greengo86
знаю и что ими не всегда и не везде можно пользоваться.

Ну почему, можно, но зачем? Это затратные операции, какой же смысл это делать когда можно проще.


Часовой пояс GMT +3, время: 04:52.