在AppleScript中,在标记后面取X符号并保存到变量中。

最后发布: 2020-08-03


问题

我正在寻找一种方法,通过AppleScript将11个符号在之后的 ?v= 中的一部分,并将它们保存到一个变量中。这是一个链接的例子。

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

所以我需要一个小脚本来获取剪贴板中的链接 识别出11个符号后的符号 ?v=,把这11个符号(PxDK95Q5qN0),并将其保存到一个变量中(例如 extract)。

我确实找到了一个部分解决方案 此处 - 但这个只有在两个部分之间的时候才会有效,如 ?v=&. 该解决方案的问题是,许多链接都很短,而且没有最后的&符号(例如。https://www.youtube.com/watch?v=PxDK95Q5qN0)

在这里,我很感谢大家的帮助和指点! :]

applescript
回答

无论你将剪贴板设置为,如,,。

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 编码 后面的11个字符返回 ?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=& 在你的例子中,仍然在发挥作用,那么这个 检索词,并在下面进一步说明,处理它。

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


使用来自 https:/regex101.com 来解释 检索词 用在 sed 指挥:

兴趣的主要部分是 捕获组 ([a-zA-Z0-9]{11})后返回的,因为这就是返回的内容,如果它直接存在于 ?v=网址.

enter image description here


enter image description here


回答

那个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://...")

你提供的两个链接都返回正确的值。