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

238
19 июля 2017, 23:22

Имеем строку url = 'http://site.loc/?search=abcdf'; и регулярное выражение re = /\&search\=.*?(?=\&)/g;

Только оно срабатывает, если находит за искомым словом символ "&". Если же его нет, то выражение не срабатывает.

Как мне добавить или до "&" или до конца строки "$"?

Answer 1

Попробуйте. Символ | - это или, также для таких поисков применяется [^&]+ - любые количеством больше 1, кроме &

console.log('http://site.loc/?search=abcdf&a=1'.match(/(\?|&)search=([^&]+)/)[2])

Answer 2

Я понимаю, что разбор url был бы приемлем, но на данный момент мне нужно было регулярное выражение, которое сделало бы то, что от него требуется.

Сегодня методом изучения нашел правильное решение:

re = /&search\=((.*?)(?=&)|(.*))/g; ищет от &search= до следующего &, а если не находит, то до конца строки. Вот это мне нужно было сделать.

Answer 3

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]);

Квантификаторы можно указывать и для групп.

READ ALSO
Окно с overflow-y

Окно с overflow-y

Добрый день, столкнулся с проблемой, у меня есть есть всплывающее окно, которое не помещается в экранеИ при попытке создать бегунок, появляется...

476
Не срабатывает transition

Не срабатывает transition

В этом случае цвет фона меняется плавно, а ширина - как если бы свойство transition не было бы задано, скачком

231
node.js binary-tree to json

node.js binary-tree to json

Всем привет! У меня есть таблица в mysql:

304
Docker container Импорт/Экспорт базы данных

Docker container Импорт/Экспорт базы данных

Использую этот https://hubdocker

270