Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ни дня без регулярки (https://javascript.ru/forum/misc/71287-ni-dnya-bez-regulyarki.html)

Rasy 07.11.2017 15:37

Ни дня без регулярки
 
Для обычного и защищенного соединения нужно убрать "pathname" из строки. Метод split() со всеми вытекающими методами не интересен, но имеет право на жизнь.
Ваши решения. 😺
var url = 'http://sitename.ru/pathname/?search';
url = url.replace(/(http[s]?:\/\/.+\/)(.+)(\?.+)/, '$1$3');
alert(url);

Alexandroppolus 07.11.2017 16:11

Это типа "пятничная задачка", во вторник? ))

var url = 'http://sitename.ru/path/name/?search';
url = url.replace(/^(https?:\/\/[^\/]+\/)[^?#]+/, '$1');
alert(url);

Rasy 07.11.2017 17:05

Цитата:

Сообщение от Alexandroppolus
Это типа "пятничная задачка", во вторник? ))

Возможно.) Я просто имею мало опыта в регулярках)
Решение полезное: логические отрицание, и только с одной ссылкой на одно подвыражение. Разбираюсь почему в подставляемую строку попадает ?search.

Nexus 07.11.2017 17:24

Цитата:

Сообщение от Rasy
Разбираюсь почему в подставляемую строку попадает ?search

Эта часть в паттерн не попала, поэтому затронута не была.

Очень грубо говоря get-параметр тут, как "world" здесь:
'hello world'.replace('hello ','');

Тут это видно: https://regex101.com/r/S3JufM/1

Rasy 07.11.2017 17:53

Цитата:

Сообщение от Nexus
Эта часть в паттерн не попала, поэтому затронута не была.

Т.е. находим первое сопоставление в строке ‒ это http://sitename.ru/pathname/
Найденное соответствие заменяем на возвращенную подстроку http://sitename.ru/ не затрагивая get параметр.
Не затрагиваем его, потому что полное регулярное выражание его не находит.

Цитата:

Сообщение от Nexus
Тут это видно:

Ага, вещь.

Rasy 09.11.2017 00:00

Возникла задача. Нужно найти: первое сопоставление - любой символ до пробела и дефиса, второе - окончание строки после дефиса с пробелом.
Ваше решение.
var str = 'x - Learn x in - y';
str = str.match(/^([^\s-]+)(?:[\s-]+)(.+)$/);
alert(JSON.stringify('1: ' + str[1] + ',  2: ' + str[2]));

Белый шум 09.11.2017 02:37

var str = [' - Learn _ in - 111', 'x - Learn x in - 22', 'xyz - Learn xyz in - 3', '44444'];
for (i in str) {
    s = str[i].match(/^(?:[^\s-]*?)([^\s-])?(?:[\s-]+)(.+)$/);
    s && alert(JSON.stringify('1: ' + s[1] + ',  2: ' + s[2]));
}

Rasy 09.11.2017 12:06

Белый шум,
Да, забыл уточнить. Соответствие повторить один и более раз до первого дефиса.

Белый шум 09.11.2017 12:17

Rasy,
Что именно нужно получить для каждого из входных данных:
[' - Learn _ in - 111', 'x - Learn x in - 22', 'xyz - Learn xyz in - 3', '44444']
??

Rasy 09.11.2017 12:23

Белый шум,
В третьем элементе xyz должен попадать в соответствие под 1-ым индексом.
var str = 'xyz - Learn x in - y';
str = str.match(/^([^\s-]+)(?:[\s-]+)(.+)$/);
alert(JSON.stringify('1: ' + str[1] + ',  2: ' + str[2]));


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