Возьмите X символов после маркера и сохраните в переменную в AppleScript - PullRequest
1 голос
/ 22 апреля 2020

Я ищу способ через AppleScript взять 11 символов после ?v= части в URL, который находится в буфере обмена, и сохранить их в переменную. Вот пример ссылки:

https://www.youtube.com/watch?v=PxDK95Q5qN0&ab_channel=TheLateShowwithStephenColbert

Итак, мне нужен небольшой скрипт, который бы брал ссылку в буфер обмена, определял 11 символов после ?v=, брал эти 11 символов (PxDK95Q5qN0) из этой ссылки и сохраните его в переменную (например, extract).

Я нашел частичное решение здесь - но оно работает только тогда, когда оно состоит из двух частей, например ?v= и &. Проблема с этим решением состоит в том, что многие ссылки короткие и не имеют последнего символа & (например, https://www.youtube.com/watch?v=PxDK95Q5qN0)

Буду признателен за любую помощь или указатели здесь! :]

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Установлено ли в буфере обмена, например,

set the clipboard to "https://www.youtube.com/watch?v=PxDK95Q5qN0&ab_channel=TheLateShowwithStephenColbert"

Или, например:

set the clipboard to "https://www.youtube.com/watch?v=PxDK95Q5qNO"

Следующий пример AppleScript код возвращает одиннадцать символов после ?v=:

set extract to do shell script ¬
    "sed -Ee 's/.*[?]v[=]([a-zA-Z0-9]{11}).*/\\1/'<<<" & ¬
    (the clipboard as text)'s quoted form
  • Обратите внимание, что \\?v\\= может использоваться вместо [?]v[=] части sed команда , так как в любом случае ? и = обрабатываются как обычные символы вместо специальных символов оболочки .

  • Кроме того, если количество целевых символов меняется с 11, но ?v= и & все еще находятся в игре, как в ваших примерах, тогда это regex , с объяснением, показанным далее ниже, обрабатывает это:

    .*[?]v[=]([a-zA-Z0-9]+[^&]).*


Использование информации от https://regex101.com для объяснения регулярное выражение используется в команде sed :

Основная часть интереса - Группа захвата ([a-zA-Z0-9]{11}), так как это то, что возвращается, если оно существует напрямую после * 10 59 * в URL .

enter image description here




enter image description here

0 голосов
/ 22 апреля 2020

Эта ссылка на macsripter указывает вам правильное направление (хотя для переваривания требуется много информации). Пока вы работаете в 10.6 или более поздней версии, вы можете использовать эту подпрограмму:

on getTheV(link_text)
    set {tid, my text item delimiters} to {my text item delimiters, {"=", "&"}}
    set theV to second text item of link_text
    set my text item delimiters to tid
    return theV
end getTheV

, которая разбивает ссылку на текстовые элементы - разделенные на '=' и '&' - и возвращает второй элемент .

Используйте это так:

set theV to getTheV("http://...")

Обе предоставленные вами ссылки возвращают правильное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...