Как на javascript обрезать ссылку?
В profilePhoto попадает такая запись https://vk.com/photo11792890_264692886 Как мне обрезать эту часть https://vk.com/ Пробовал делать replace но ничего у меня не получается, ребята, помогите найти решение.
Отслеживать
задан 17 ноя 2016 в 21:09
1,053 7 7 золотых знаков 18 18 серебряных знаков 38 38 бронзовых знаков
В profilePhoto не может попадать такая «запись». «Пробовал делать replace но . » — покажите, как пробовали.
– user176262
17 ноя 2016 в 21:14
Пробую сделать так profilePhoto = window.content.document.getElementById(‘profile_photo_link’); profilePhoto = profilePhoto.substr(15, profilePhoto.length); alert(profilePhoto); Но так и нечего не получается, но если поместить в переменную обичный текст то режет
17 ноя 2016 в 21:17
profilePhoto — это не строка, а DOM элемент. profilePhoto = profilePhoto.src.substr(15, profilePhoto.length); alert(profilePhoto);
Как обрезать текст и добавить в конце многоточие?
Иногда приходится ограничивать длинный текст, к примеру, в блоке с фиксированными размерами, чтобы текст не выходил за пределы этого блока. Часто делается так: текст, который не помещается в заданные размеры, обрезается, а в конце текста добавляется многоточие. Оно подсказывает пользователю, что текст отображается лишь частично.
Способ обрезания текста зависит от длины и числа строк.
Однострочный текст
Для одной строки есть специальное свойство text-overflow со значением ellipsis , которое добавляет многоточие в конце текста. Чтобы это свойство работало, нужно соблюсти ещё два условия.
- Текст должен выводиться в одну строку без переносов. Для запрета переносов мы используем свойство white-space со значением nowrap .
- Текст за пределами блока скрывается от просмотра с помощью свойства overflow со значением hidden .
Комбинируя три свойства white-space, overflow и text-overflow получим обрезанную строку с многоточием в конце (пример 1).
Пример 1. Использование text-overflow
Результат данного примера показан на рис. 1.

Рис. 1. Вид обрезанного однострочного текста
Многострочный текст
Ограничение нескольких строк представляет собой более сложную задачу, которая потребует применения целого набора нестандартных и устаревших свойств. Нам понадобится следующее.
- Свойство -webkit-line-clamp, которое ограничивает число строк. Значение 3 отобразит три строки, значение 4 — четыре строки.
- Свойство display со значением -webkit-box .
- Свойство -webkit-box-orient со значением vertical .
- Свойство overflow со значением hidden , оно скрывает текст за пределами блока.
Заметьте, что в большинстве случаев мы имеем дело не со стандартными стилевыми свойствами, а добавляем к ним префикс -webkit-. При этом все эти свойства с префиксами работают даже в Firefox.
Свойство display: -webkit-box в настоящий момент устарело, при вёрстке сейчас используется display: flex . Аналогично устарело и -webkit-box-orient: vertical , сейчас вместо него применяется flex-direction: column . При этом нельзя просто заменить устаревшие свойства современными, перестанет работать ограничение строк.
Также есть проблема и с высотой блока — при добавлении padding его значение прибавляется к высоте строк, в итоге отображается часть лишней строки. Чтобы этого избежать можно явно задать высоту блока или вложить один блок внутрь другого. В примере 3 свойство padding применяется к , а набор свойств для ограничения текста к
.
Пример 2. Использование -webkit-line-clamp
Результат данного примера показан на рис. 2.

Рис. 2. Вид обрезанного многострочного текста
Обратите внимание, что здесь нам не нужен text-overflow, многоточие добавляется через свойство -webkit-line-clamp.
Использование JavaScript
Если не хочется связываться с устаревшими свойствами, всегда можно воспользоваться JavaScript для решения нашей задачи. Библиотека Clamp.js позволяет выбрать алгоритм работы — с помощью -webkit-line-clamp , в этом случае применяется набор свойств из примера 2 или путём явного обрезания строки (пример 3).
Пример 3. Использование Clamp.js
Обратите внимание на параметр useNativeClamp . По умолчанию его значение равно true , в этом случае к элементу добавляется свойство -webkit-line-clamp . Если же указать значение false , тогда строка обрезается явно. Между этими алгоритмами Clamp.js есть небольшая разница, заметная при изменении размера окна браузера. Использование useNativeClamp:true обрезает строку лишь при необходимости, когда она превышает три строки. useNativeClamp:false обрезает всегда и при изменении размеров блока строка так и остаётся обрезанной.
Как обрезать строку через js чтобы остались нужная часть?
Нужно как-то обрезать ссылки вида https://www.instagram.com/p/BGrZOf5OTpH/?taken-by=.
Чтобы оставался только идентификатор, в примере это — BGrZOf5OTpH
Подскажите каким образом это можно сделать с помощью jQuery?
- Вопрос задан более трёх лет назад
- 2583 просмотра
Комментировать
Решения вопроса 2
var url = 'https://www.instagram.com/p/BGrZOf5OTpH/?taken-by=/. '; var // BGrZOf5OTpH
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Frontend developer at Yandex
'use strict'; const url = 'https://www.instagram.com/p/BGrZOf5OTpH/?taken-by=. '; const // => BGrZOf5OTpH
Ответ написан более трёх лет назад
Да, действительно, split проще, не нужно мудрить с регулярными выражениями. Единственное возможное преимущество моего варианта в том случае, если URL вводится руками и пользователь может опустить префикс «http://».
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- JavaScript
Как вставить инлайновый скрипт на DOM веб страницы при разработке расширения для гугл хром?
- 1 подписчик
- 3 часа назад
- 59 просмотров
Обрезать ссылку, что бы остался только домен
Доброго времени суток. Регулярные выражения — это просто высшая математика, буду рад помощи.
Задача: обрезать любую ссылку так, что бы оставалось имя домена
Ссылки могут быть вида:
Нужно сделать так, что бы оставалось site.ru
нужно получить значение между » http:// ; https:// ; http://www. ; https://www. « и первым символом « / «
Tempo
AutoIT Гуру
Сообщения 616 Репутация 205
#include example() Func example() Local $aUrls[] = ['http://site.ru/post/date/date/', _ 'https://www.site.ru/post/date/date/', _ 'https://site.ru/post/date/date/', _ 'http://www.site.ru'] _ArrayDisplay($aUrls, 'Before') For $i = 0 To UBound($aUrls) - 1 $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1') Next _ArrayDisplay($aUrls, 'After') EndFunc ;==>example
Последнее редактирование: 10 Янв 2021
Soderling
Новичок
Сообщения 29 Репутация 0
Отлично работает! Но столкнулся с новой проблемой.
Почему так происходит и как исправить?
; Если получаю ссылку из строки браузера - не обрезается $oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска") $URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue") $URL = StringRegExpReplace($URL, '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1') msgbox(64,'Сообщение', $URL) ; Если эту ссылку засунуть в переменную руками - работает $URL = "http://autoit-script.ru/threads/obrezat-ssylku-chto-by-ostalsja-tolko-domen.28082/#post-154387" $URL = StringRegExpReplace($URL, '(?im)https?://(?:www\.)?(.+?)(?:/.*|$)', '\1') msgbox(64,'Сообщение', $URL)
Tempo
AutoIT Гуру
Сообщения 616 Репутация 205
Из адресной строки вы в большинстве случаев получите ссылку без протокола
site.ru/post/date/date/
#include example() Func example() Local $aUrls[] = ['http://site.ru/post/date/date/', _ 'https://www.site.ru/post/date/date/', _ 'https://site.ru/post/date/date/', _ 'http://www.site.ru', _ 'www.site.ru/date/date/', _ 'site.ru/date/date/'] _ArrayDisplay($aUrls, 'Before') For $i = 0 To UBound($aUrls) - 1 $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?im)(. +?://)?(?:www\.)?([^/]*).*', '\1') Next _ArrayDisplay($aUrls, 'After') EndFunc ;==>example
Последнее редактирование: 10 Янв 2021
Soderling
Новичок
Сообщения 29 Репутация 0
Tempo благодарю!) то что нужно
CreatoR
Must AutoIt!
Команда форума
Администратор
Сообщения 8,671 Репутация 2,480
Задача: обрезать любую ссылку так, что бы оставалось имя домена
Тут нужно уточнять, т.к доменное имя по сути может состоять из нескольких уровней, поэтому и my.site.ru тоже будет считаться именем домена.
Но как я понял в данном случае нужно получить имя домена 2-ого уровня ( site.ru ).
Также нужно учитывать что ссылка может содержать разные протоколы, поэтому любая ссылка может выглядеть и как ftp://site.ru (что в принципе учтено в последнем примере).
#include example() Func example() Local $aUrls[] = _ [ _ 'http://site.ru/post/date/date/', _ 'https://www.site.ru/post/date/date/', _ 'https://site.ru/post/date/date/', _ 'http://www.site.ru', _ 'ftp://www.site.ru/date/date/', _ 'ftp://my.site.ru/date/date/', _ 'www.site.ru/date/date/', _ 'site.ru/date/date/' _ ] _ArrayDisplay($aUrls, 'Before') For $i = 0 To UBound($aUrls) - 1 $aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?i)^(. +://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1') ;Или так ;$aUrls[$i] = StringRegExpReplace($aUrls[$i], '(?i)^.*?([^\.:/]*\.[^/\.]*)(?:/.*)?$', '\1') Next _ArrayDisplay($aUrls, 'After') EndFunc ;==>example
Последнее редактирование: 12 Янв 2021
Soderling
Новичок
Сообщения 29 Репутация 0
Честно говоря даже не подумал об этом)))
Сообщение автоматически объединено: 26 Янв 2021
Доброго времени суток! Опять проблема возникла
Задача: Удалить все ссылки из массива, которые содержат доменное имя
К примеру сайт google , ниже скрин, там видно, что не все ссылки удаляются
$hPage = ControlGetHandle("[RegexpTitle: - Google Chrome]", "", "Chrome_RenderWidgetHostHWND1") $oParent = _UIA_GetElementFromHandle($hPage) $oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска") $URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue") $URL = StringRegExpReplace($URL, '(?i)^(. +://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1') Local $All_link[0] $All = _UIA_FindAllElements($oParent, "ControlType", $UIA_HyperlinkControlTypeId) For $i = 1 To $All[0] _Arrayadd($All_link, _UIA_ElementGetPropertyValue($All[$i], "Value.Value")) Next _ArrayDisplay($All_link) While 1 $ind = _ArraySearch($All_link, $URL,0,0,0,1) If $ind <> -1 Then _ArrayDelete($All_link, $ind) Else exitloop EndIf Wend _ArrayDisplay($All_link)
Сообщение автоматически объединено: 27 Янв 2021
Извиняюсь, но проблема оказалась не в регулярке и тему наверно надо куда-нибудь перенести, но все же.
Вобщем решение нашел, думаю кривое, но работает ( кто понимает и его не затруднит, объясните пожалуйста почему стало работать)
$hPage = ControlGetHandle("[RegexpTitle: - Google Chrome]", "", "Chrome_RenderWidgetHostHWND1") ; 1 вариант ------ косяк кроется вот тут ; $hPage = WinWait(" - Google Chrome", "", 3) ; 2 вариант ---- если сделать так то работает. ;Почему первый случай не работает, а второй работает? $oParent = _UIA_GetElementFromHandle($hPage) $oElement_url = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска") $URL = _UIA_ElementGetPropertyValue($oElement_url, "ValueValue") $URL = StringRegExpReplace[/URL]($URL, '(?i)^(. +://)?.*?([^\.]+\.[^/\.]+)(/.*|$)', '\1') msgbox (64,'', $url )