在标记后取 X 符号并保存到 AppleScript 中的变量
Take X Symbols After a Marker and Save to Variable in AppleScript
我正在寻找一种方法,通过 AppleScript 在剪贴板中的 URL 中的 ?v=
部分之后获取 11 个符号,并将它们保存到变量中。这是 link:
的示例
https://www.youtube.com/watch?v=PxDK95Q5qN0&ab_channel=TheLateShowwithStephenColbert
所以我需要一个小脚本,它可以在剪贴板中获取 link,识别 ?v=
之后的 11 个符号,从 [=26= 中取出这 11 个符号(PxDK95Q5qN0
) ] 并将其保存到变量中(例如 extract)。
我确实找到了部分解决方案 here — 但该解决方案仅在两部分之间时有效,例如?v=
和 &
。该解决方案的问题是许多 link 很短并且没有最后一个 & 符号(例如 https://www.youtube.com/watch?v=PxDK95Q5qN0
)
我将不胜感激任何帮助或指点! :]
那个 macsripter link 为您指明了正确的方向(尽管有很多信息需要消化)。只要你是 运行 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
将 link 拆分为文本项 - 拆分为“=”和“&” - return 是第二项。
像这样使用它:
set theV to getTheV("http://...")
您提供的 link 两个 return 都是正确的值。
是否将剪贴板设置为,例如:
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"
下面的example AppleScript code returns [=之后的十一个字符=14=]:
set extract to do shell script ¬
"sed -Ee 's/.*[?]v[=]([a-zA-Z0-9_-]{11}).*/\1/'<<<" & ¬
(the clipboard as text)'s quoted form
请注意,可以使用 \?v\=
代替 sed
命令的 [?]v[=]
部分 如果 ?
和 =
被视为 常规字符 而不是 shell 特殊字符 .
此外,如果目标角色的数量从 11 变为 ?v=
和 &
仍在播放,如您的示例,那么此 正则表达式,下面进一步解释,处理它:
.*[?]v[=]([a-zA-Z0-9_-]+[^&]).*
备注:
如果 11 个目标字符包含不同于 捕获组中显示的内容:
([a-zA-Z0-9_-]{11})
然后根据需要进行修改。
使用 https://regex101.com 中的信息来解释 regex 在 sed
command 中使用:
感兴趣的主要部分是 Capturing Group ([a-zA-Z0-9_-]{11})
,因为这是返回的内容,如果它直接存在于 ?v=
之后 URL.
当捕获组是:([a-zA-Z0-9_-]+)
我正在寻找一种方法,通过 AppleScript 在剪贴板中的 URL 中的 ?v=
部分之后获取 11 个符号,并将它们保存到变量中。这是 link:
https://www.youtube.com/watch?v=PxDK95Q5qN0&ab_channel=TheLateShowwithStephenColbert
所以我需要一个小脚本,它可以在剪贴板中获取 link,识别 ?v=
之后的 11 个符号,从 [=26= 中取出这 11 个符号(PxDK95Q5qN0
) ] 并将其保存到变量中(例如 extract)。
我确实找到了部分解决方案 here — 但该解决方案仅在两部分之间时有效,例如?v=
和 &
。该解决方案的问题是许多 link 很短并且没有最后一个 & 符号(例如 https://www.youtube.com/watch?v=PxDK95Q5qN0
)
我将不胜感激任何帮助或指点! :]
那个 macsripter link 为您指明了正确的方向(尽管有很多信息需要消化)。只要你是 运行 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
将 link 拆分为文本项 - 拆分为“=”和“&” - return 是第二项。
像这样使用它:
set theV to getTheV("http://...")
您提供的 link 两个 return 都是正确的值。
是否将剪贴板设置为,例如:
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"
下面的example AppleScript code returns [=之后的十一个字符=14=]:
set extract to do shell script ¬
"sed -Ee 's/.*[?]v[=]([a-zA-Z0-9_-]{11}).*/\1/'<<<" & ¬
(the clipboard as text)'s quoted form
请注意,可以使用
\?v\=
代替sed
命令的[?]v[=]
部分 如果?
和=
被视为 常规字符 而不是 shell 特殊字符 .此外,如果目标角色的数量从 11 变为
?v=
和&
仍在播放,如您的示例,那么此 正则表达式,下面进一步解释,处理它:.*[?]v[=]([a-zA-Z0-9_-]+[^&]).*
备注:
如果 11 个目标字符包含不同于 捕获组中显示的内容:
([a-zA-Z0-9_-]{11})
然后根据需要进行修改。
使用 https://regex101.com 中的信息来解释 regex 在 sed
command 中使用:
感兴趣的主要部分是 Capturing Group ([a-zA-Z0-9_-]{11})
,因为这是返回的内容,如果它直接存在于 ?v=
之后 URL.
当捕获组是:([a-zA-Z0-9_-]+)