Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Как в регулярном выражении написать “или”?

#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= до следующего &, а если не находит, то до конца строки. Вот это мне нужно было сделать.

Комментариев нет:

Отправить комментарий