Перейти к содержимому

Как обрезать ссылку js

  • автор:

Как на 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 , которое добавляет многоточие в конце текста. Чтобы это свойство работало, нужно соблюсти ещё два условия.

  1. Текст должен выводиться в одну строку без переносов. Для запрета переносов мы используем свойство white-space со значением nowrap .
  2. Текст за пределами блока скрывается от просмотра с помощью свойства overflow со значением hidden .

Комбинируя три свойства white-space, overflow и text-overflow получим обрезанную строку с многоточием в конце (пример 1).

Пример 1. Использование text-overflow

Результат данного примера показан на рис. 1.

Вид обрезанного однострочного текста

Рис. 1. Вид обрезанного однострочного текста

Многострочный текст

Ограничение нескольких строк представляет собой более сложную задачу, которая потребует применения целого набора нестандартных и устаревших свойств. Нам понадобится следующее.

  1. Свойство -webkit-line-clamp, которое ограничивает число строк. Значение 3 отобразит три строки, значение 4 — четыре строки.
  2. Свойство display со значением -webkit-box .
  3. Свойство -webkit-box-orient со значением vertical .
  4. Свойство 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

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

AppFA

Frontend developer at Yandex

'use strict'; const url = 'https://www.instagram.com/p/BGrZOf5OTpH/?taken-by=. '; const // => BGrZOf5OTpH

Ответ написан более трёх лет назад

Да, действительно, split проще, не нужно мудрить с регулярными выражениями. Единственное возможное преимущество моего варианта в том случае, если URL вводится руками и пользователь может опустить префикс «http://».

Ответы на вопрос 0

Ваш ответ на вопрос

Войдите, чтобы написать ответ

javascript

  • 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 )

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *