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