#javascript #регулярные_выражения
Имеем строку url = 'http://site.loc/?a=1&search=abcdf'; и регулярное выражение re = /\&search\=.*?(?=\&)/g; Только оно срабатывает, если находит за искомым словом символ &. Если же его нет, то выражение не срабатывает. Как мне исправить регулярное выражение, что бы оно выполнялось или до & или до конца строки $?
Ответы
Ответ 1
Попробуйте. Символ | - это или, также для таких поисков применяется [^&]+ - любые количеством больше 1, кроме & console.log('http://site.loc/?search=abcdf&a=1'.match(/(\?|&)search=([^&]+)/)[2])Ответ 2
r = /[?&]search=([^&]+)/; console.log('http://site.loc/?search=abcdf&a=1'.match(r)[1]); console.log('http://site.loc/?search=abcdf'.match(r)[1]); console.log('http://site.loc/?b=1&search=abcdf'.match(r)[1]); console.log('http://site.loc/?b=1&search=abcdf&a=1'.match(r)[1]); // если доработать именно ваш код... r = /&search=(.*)(?=&)*/; // ^ console.log('http://site.loc/?b=1&search=abcdf'.match(r)[1]); Квантификаторы можно указывать и для групп.Ответ 3
Я понимаю, что разбор url был бы приемлем, но на данный момент мне нужно было регулярное выражение, которое сделало бы то, что от него требуется. Сегодня методом изучения нашел правильное решение: re = /&search\=((.*?)(?=&)|(.*))/g; ищет от &search= до следующего &, а если не находит, то до конца строки. Вот это мне нужно было сделать.
Комментариев нет:
Отправить комментарий