Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2017, 15:37
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Ни дня без регулярки
Для обычного и защищенного соединения нужно убрать "pathname" из строки. Метод split() со всеми вытекающими методами не интересен, но имеет право на жизнь.
Ваши решения. 😺
var url = 'http://sitename.ru/pathname/?search';
url = url.replace(/(http[s]?:\/\/.+\/)(.+)(\?.+)/, '$1$3');
alert(url);
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2017, 16:11
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

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

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

Последний раз редактировалось Alexandroppolus, 07.11.2017 в 16:15.
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2017, 17:05
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от Alexandroppolus
Это типа "пятничная задачка", во вторник? ))
Возможно.) Я просто имею мало опыта в регулярках)
Решение полезное: логические отрицание, и только с одной ссылкой на одно подвыражение. Разбираюсь почему в подставляемую строку попадает ?search.
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2017, 17:24
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

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

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

Тут это видно: https://regex101.com/r/S3JufM/1
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2017, 17:53
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

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

Сообщение от Nexus
Тут это видно:
Ага, вещь.
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2017, 00:00
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Возникла задача. Нужно найти: первое сопоставление - любой символ до пробела и дефиса, второе - окончание строки после дефиса с пробелом.
Ваше решение.
var str = 'x - Learn x in - y';
str = str.match(/^([^\s-]+)(?:[\s-]+)(.+)$/);
alert(JSON.stringify('1: ' + str[1] + ',  2: ' + str[2]));
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2017, 02:37
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

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]));
}
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2017, 12:06
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Белый шум,
Да, забыл уточнить. Соответствие повторить один и более раз до первого дефиса.
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2017, 12:17
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Rasy,
Что именно нужно получить для каждого из входных данных:
[' - Learn _ in - 111', 'x - Learn x in - 22', 'xyz - Learn xyz in - 3', '44444']
??
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2017, 12:23
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести кол-во дней до дня Рождения plug-ugly Общие вопросы Javascript 3 14.09.2017 10:16
Запуск браузера (IE6 и выше) без "офорлмения" - без панелей, меню, строки состояния jett Events/DOM/Window 4 23.11.2011 15:58
$.ajax работает без success но при этом часть кода перезагружается!? saturn Элементы интерфейса 0 16.10.2011 10:09
Get запрос в Greasemonkey без обновления страницы 100matolog Общие вопросы Javascript 1 03.10.2011 04:37
Подскажите как в VLC плеере переключать канал без перезагрузки страницы? mff Events/DOM/Window 0 10.05.2010 17:28