如何检查剪贴板中的第一个单词是什么?



假设我的Cliboard变量当前处于以下状态:

Clipboard:= "-Classes Essay on Hobbes

我想根据剪贴板中的第一个块/字执行If条件,在本例中为-Classes。基本上使用FileAppend:

执行如下操作:
if "-diary"{
;Create file in /Diary/Entry 27.MD
}
Else if  "-Classes"{
;Create file in /Classes/Essay on Hobbes.MD
}

我能够在文档中找到这个页面,如果Var在/包含MatchList -语法&用法|自动热键,但它不是位置的,这意味着如果块-Classes由于某种原因也作为文件名的一部分存在,我的逻辑中断。

我也冒昧地在其他论坛上交叉提问了这个问题。任何帮助将非常感激!

或者…你只需:

Clipboard:= "-Classes Essay on Hobbes"
Gosub % subroutine := SubStr( Clipboard, 1, InStr( Clipboard, " " )-1 )
Clipboard:= "-diary diary example"
Gosub % subroutine := SubStr( Clipboard, 1, InStr( Clipboard, " " )-1 )
Return
-diary:
MsgBox % "Diary:`n"  StrReplace( clipboard, subroutine " " ) 
;Create file in /Diary/Entry 27.MD
Return
-Classes:
MsgBox % "Classes:`n"  StrReplace( clipboard, subroutine " " )
;Create file in /Classes/Essay on Hobbes.MD
Return

你可以试试StrSplit()

; Array := StrSplit(String , Delimiters, OmitChars, MaxParts)
clip_array := StrSplit(Clipboard, A_Space, , 1)
if clip_array[1] = "-diary"{
;Create file in /Diary/Entry 27.MD
}
Else if clip_array[1] = "-Classes"{
;Create file in /Classes/Essay on Hobbes.MD
}
Else {
MsgBox % "No match for " clip_array[1]
}

在这里描述https://www.autohotkey.com/docs/commands/StrSplit.htm并注意MaxParts的参数,该参数表示有多少"符号"。如果剪贴板足够大(在这种情况下,我不确定其他答案是否更好),查看(将其余部分放在最后)。

如果剪贴板上的文本量非常大,则可能导致脚本将所有文本加载到脚本内存中,只是为了检查第一个值而导致延迟。我推荐regexMatch,因为它可以返回一个位置并捕获单词,而无需解析所有内容。

; for reference of regexMatch function
; regexMatch(Haystack, Needle, outputVar, startPos)
Fnd := regexMatch(Clipboard, "U)(-[w]+))", capSubStr, inStr(Clipboard, "-"))
if (Fnd==0) {
Msgbox, Didn't find a word on the Clipboard.
Return
}
checkVal := capSubStr1
if (checkVal=="-diary") {
;Create file in /Diary/Entry 27.MD
} Else if (checkVal=="-Classes") {
;Create file in /Classes/Essay on Hobbes.MD
}

这里是使用AHK正则表达式的基本参考:https://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm

如果你还不熟悉regex,这将给你一个关于上面表达式实际在寻找什么的想法。

最新更新