Ни дня без регулярки
Для обычного и защищенного соединения нужно убрать "pathname" из строки. Метод split() со всеми вытекающими методами не интересен, но имеет право на жизнь.
Ваши решения. 😺 var url = 'http://sitename.ru/pathname/?search'; url = url.replace(/(http[s]?:\/\/.+\/)(.+)(\?.+)/, '$1$3'); alert(url); |
Это типа "пятничная задачка", во вторник? ))
var url = 'http://sitename.ru/path/name/?search'; url = url.replace(/^(https?:\/\/[^\/]+\/)[^?#]+/, '$1'); alert(url); |
Цитата:
Решение полезное: логические отрицание, и только с одной ссылкой на одно подвыражение. Разбираюсь почему в подставляемую строку попадает ?search. |
Цитата:
Очень грубо говоря get-параметр тут, как "world" здесь: 'hello world'.replace('hello ',''); Тут это видно: https://regex101.com/r/S3JufM/1 |
Цитата:
Найденное соответствие заменяем на возвращенную подстроку http://sitename.ru/ не затрагивая get параметр. Не затрагиваем его, потому что полное регулярное выражание его не находит. Цитата:
|
Возникла задача. Нужно найти: первое сопоставление - любой символ до пробела и дефиса, второе - окончание строки после дефиса с пробелом.
Ваше решение. var str = 'x - Learn x in - y'; str = str.match(/^([^\s-]+)(?:[\s-]+)(.+)$/); alert(JSON.stringify('1: ' + str[1] + ', 2: ' + str[2])); |
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,
Что именно нужно получить для каждого из входных данных: [' - Learn _ in - 111', 'x - Learn x in - 22', 'xyz - Learn xyz in - 3', '44444'] ?? |
Белый шум,
В третьем элементе xyz должен попадать в соответствие под 1-ым индексом. var str = 'xyz - Learn x in - y'; str = str.match(/^([^\s-]+)(?:[\s-]+)(.+)$/); alert(JSON.stringify('1: ' + str[1] + ', 2: ' + str[2])); |
:)
var str = 'xyz - Learn x in - y'; str = str.match(/(.*?)(?: - )(.*)/).slice(1); alert(JSON.stringify(str)); |
рони,
А зачем в группировке экранирован дефис? Он ведь не имеет специальное значение. |
Rasy,
убрал :) |
"(?:" и ")" там тоже нафиг не надо :) бесполезная группировка-то
|
Цитата:
|
Цитата:
|
var str = 'xyz - Learn x in - y'; str = str.match(/(.*?) - (.*)/).slice(1); alert(JSON.stringify(str)); всё то же самое, только убрал группировку вокруг " - " |
Alexandroppolus,
Классно! Получается " - " более краткая и точная альтернатива классу символов (?:[\s-]), в нашем случае. |
Alexandroppolus,
спасибо! |
Rasy,
более точная как правильнее - зависит от задачи. / - / - это если надо строго "тире между пробелами" /\s-\s/ - тире между любыми "пробельными символами" /[\s-]+/ - произвольная подстрока из "пробельных символов" и тире |
Alexandroppolus,
:thanks: |
подскажите по регулярке или инной выход. Мне нужно разбить строку по нескольким ключевым словам "включить выключить". Например,
есть строка: "включить воду свет выключить воду выключить свет" мне надо разбить ее на: включить воду свет выключить воду выключить свет подскажите варианты |
var str = "не включать нифига включить воду свет выключить воду выключить свет"; var values = str.match(/(?:включить|выключить)\s(?:.(?!включить|выключить))+/g); alert(values.join('\n')); |
var str = "не включать нифига включить воду свет выключить воду выключить свет"; var values = str.match(/(включить|выключить).*?(?=включить|выключить|$)/g); alert(values.join('\n')); |
пасиб ребята, надо регулярки подтянуть мне, с 2009 года не кодил, все настолько забылось, что просто ужас, счас буду разбиратся в ваших регулярках, что к чему...
|
рони,
Правильно ли я сформулировал? Сопоставить слово "включить или выключить" за которым следует произвольный символ, повторяющийся только, если за ним следует слово "включить или выключить", или конец строки. Alexandroppolus, Сопоставить слово "включить или выключить" за которым следует пробел, за пробелом следует произвольный символ повторяющийся один и более раз, если только за ним не следут слово "включить или выключить". Зачем запрет на использование ссылок в группировке? У меня правильно находит и без символов ?: /(включить|выключить)\s(.(?!включить|выключить))+/g |
Цитата:
Цитата:
баз вопросика там съело бы всю строку первым совпадением. |
подскажите, почему данная регулярка не будет работать ?
/(?:включить|выключить).+(?!включить|выключить)/gim сначала проверяем есть ли включить|выключить потом идет любой символ от 1 и больше раза и не должно быть в конце включить|выключить ? --- Я вообщем из разбора ваших примеров решил так /(?:включить|выключить)(?:.(?!включить|выключить))+/gim так как мне может прилететь строка "Включить воду свет выключить воду выключить включить свет" и тогда выдаст ["выключить воду", "выключить включить свет"] |
Цитата:
Цитата:
|
Ребята, я еще со своим велосипедом )), сегодня вспоминал регулярки и вот такой вопрос по прежнему вопросу.
Есть строка: "Включить воду свет выключить воду выключить включить свет" мне надо что-бы не повторялось подряд выключить включить, а учитывалась последняя подстрока "включить|выключить" с данными, решил вот такой регуляркой var str = "Включить воду свет выключить воду выключить включить свет" ; var reg = /(?:включить|выключить)\s(?!включить|выключить).+?(?=\sвключить|\sвыключить|$)/gim; alert(str.match(reg)); Есть получше вариант ? Или это нормально в плане оптимизаци? |
Цитата:
var str = "Включить воду свет выключить воду выключить включить свет"; var reg = /(включить|выключить)(?:.(?!включить|выключить))+/gim ; var values = str.match(reg); alert(values.join('\n')); |
Цитата:
|
Цитата:
|
есть массив строк
var arrData = [ "Частота вращения шпинделей (об/мин) 6000", "Давление, в пневмосистеме, Атм. 6", "Частота вращения шпинделей (мин) 6000" ]; надо строки разбить, на такие подстроки "Частота вращения шпинделей" "об/мин" "6000" "Давление, в пневмосистеме" "Атм." "6" это тип данные отформатировать для таблицы var reg = /(.+)(?:\s\((.+)\))|(?:,\s(.+))\s+(\d+)$/; // если так /(.+)(?:\s\((.+)\)|,\s(.+))\s+(\d+)$/ то что-то похожее, но не то получается, одна маска undefined var arrData = [ "Частота вращения шпинделей (об/мин) 6000", "Давление, в пневмосистеме, Атм. 6", "Частота вращения шпинделей (мин) 6000" ]; var res = arrData[1].match(reg); |
Lion777,
<script> var reg = /^(.*)\s+\(?([^()]+)\)?\s+(\S+)/; var arrData = [ "Частота вращения шпинделей (об/мин) 6000", "Давление, в пневмосистеме, Атм. 6", "Частота вращения шпинделей (мин) 6000" ]; var res = arrData.map(function(a) { return a.match(reg).slice(1) }); document.write(JSON.stringify(res)) </script> |
Пасиб рони ), чет игрался регулярками, вроде все логично, на мой взгляд )), а не катит...
Еще вопрос, запятую надо тоже убрать Давление, в пневмосистеме, чет думал сделать так "(.*),?\s+" , а оно не катит ) |
Lion777,
<script> var reg = /^(.*[^,])[,\s]+\(?([^()]+)\)?\s+(\S+)/; var arrData = [ "Частота вращения шпинделей (об/мин) 6000", "Давление, в пневмосистеме, Атм. 6", "Частота вращения шпинделей (мин) 6000" ]; var res = arrData.map(function(a) { return a.match(reg).slice(1) }); document.write(JSON.stringify(res)) </script> |
Lion777,
<script> var reg = /^(.*[^,\s])[,\s(]+([^()]+)[)\s]+(\S+)/; var arrData = [ "Частота вращения шпинделей (об/мин) 6000", "Давление, в пневмосистеме, Атм. 6", "Частота вращения шпинделей (мин) 6000" ]; var res = arrData.map(function(a) { return a.match(reg).slice(1) }); document.write(JSON.stringify(res)) </script> |
Пасиб, чет полностью логику догнать в этих регулярках непросто )), вроде верно пишу, а оно )))... все не то, хоть рядом ))
|
Часовой пояс GMT +3, время: 12:48. |