Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   И снова регулярка (https://javascript.ru/forum/misc/77416-i-snova-regulyarka.html)

рони 30.04.2019 10:22

Цитата:

Сообщение от Sergey1986
Так более понятно?

Цитата:

Сообщение от ksa
когда речь идет о регулярках, обычно пишут:
- Имею вот такую строку, хочу из нее получить вот такое.

:-?

Dilettante_Pro 30.04.2019 12:53

url = 'user/1';
template = /user\/(\d+)/g; 

arr = url.match(template); 

console.log(template); 
console.log(arr);

ksa 30.04.2019 14:04

Цитата:

Сообщение от Sergey1986
template = 'user/{id:\d+}';

Из этой строки
Вот это
Цитата:

Сообщение от Sergey1986
arr[id] = 1 //(условно)

Не получить.
Так понятно? :)

Alexandroppolus 30.04.2019 15:05

Цитата:

Сообщение от Sergey1986 (Сообщение 507215)
Доброго времени суток!

есть таккая вот штука

url = 'user/1';
template = 'user/{id:\d+}'; 

template = template.replace(/{([A-Za-z]+):([^\}]+)}/g, '(?<id>/\d+)'); //в пхп (?P<\1>\2)
template = '^' + template + '$';

arr = url.match(template); 

console.log(template); 
console.log(arr);


выводит

"^user/(?<id>/d+)$"
null


Где делаю ошибку

url = 'user/1';
template = 'user/{id:\\d+}'; 

template = template.replace(/{([A-Za-z]+):([^\}]+)}/g, '(?<$1>$2)'); //в пхп (?P<\1>\2)
template = RegExp('^' + template + '$');

arr = url.match(template); 

console.log(template); 
console.log(arr);

Alexandroppolus 30.04.2019 15:08

Но если в самой регулярке для значения id будет закрывающая фигурная скобка, то всё летит к черту.
И да, именованные группы появились в js недавно, это может работать не во всех браузерах.

GayCoder 30.04.2019 15:56

vanished

GayCoder 30.04.2019 15:57

vanished

GayCoder 30.04.2019 16:01

vanished

Sergey1986 01.05.2019 10:30

Все классно, а как получить то массив?

arr [id] = 1 или если несколько параметров заложено arr [id] = 1 и arr[pid] = 2

Sergey1986 01.05.2019 10:33

Спасибо за помощь Alexandroppolus !!!!не увидел кейс с решением


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