StringReplace

AutoHotKey

StringReplace

用新字符串替换指定的子字符串.

OutputVar := StrReplace(Haystack, SearchText [, ReplaceText, OutputVarCount, Limit := -1])  ; v1.1.21+
StringReplace, OutputVar, InputVar, SearchText [, ReplaceText, ReplaceAll?]

参数

OutputVar

用来存储替换后的新字符串的变量名.

InputVar or Haystack

需要被读取内容的变量名. 不要把名称括在百分号中, 除非您希望使用变量的内容作为被解析的变量名.

因为 StrReplace() 是一个函数, Haystack 可以是一个表达式.

SearchText

要搜索的字符串. 如果没有启用 StringCaseSense, 那么匹配过程不区分大小写.

ReplaceText

用来替换 SearchText 的文本. 如果省略或为空, 那么 SearchText 会被替换为空. 换句话说, 它会被从 OutputVar 删除.

OutputVarCount (StrReplace)

用来存储替换次数的变量(没有则为0).

Limit (StrReplace)

如果 Limit 省略, 那么默认为 -1, 将替换所有Haystack 中要替换的内容. 否则, 如果指定一个允许替换的最大数, 那么在 Haystack 中最后一个替换对象后面的内容将保持不变.

ReplaceAll? (StringReplace)

如果省略, 那么只替换 SearchText 的首个匹配. 如果此参数为 1, A 或 All, 那么替换所有匹配.

指定单词 UseErrorLevel 可以把替换的次数保存到 ErrorLevel (没有则为 0). UseErrorLevel 包含了 "All" 的作用.

ErrorLevel

StrReplace: ErrorLevel 没有设置.

当最后一个参数为 UseErrorLevel 时, ErrorLevel 中会保存替换的次数 (没有则为 0). 否则,如果在 InputVar 中没有找到 SearchText 则 ErrorLevel 被置为 1,找到则置为 0.

备注

在这个及其他所有命令中,OutputVarInputVar 中可以使用相同的变量.

内置变量 %A_Space%%A_Tab% 分别包含了单个空格和单个 tab 字符. 当您需要搜索单独的空格或 tab 或在 SearchText 的开始或末尾含有空格或 tab 时, 这很有用.

在 v1.0.45, 为了改善性能和内存的利用率, AllSlow 选项已经作废. 尽管仍可以指定它, 但不会有效果.

相关

RegExReplace(), IfInString, StringCaseSense, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, StringGetPos, if var is type

示例

; 移除剪贴板中所有的 CR+LF:
StringReplace, clipboard, clipboard, `r`n, , All

; 用加号替换所有空格:
StringReplace, NewStr, OldStr, %A_SPACE%, +, All

; 移除变量中所有空行:
Loop
{
    StringReplace, MyString, MyString, `r`n`r`n, `r`n, UseErrorLevel
    if ErrorLevel = 0  ; 不需要再进行替换.
        break
}