由于 VBScript 不支持后视,我正在寻找替代解决方案。
我有字符串 '\E\F\'。
我想用'~'替换\F\,但前提是它前面没有\E。
替换后,我希望 '\E\F\' 为 '\E\F\'。
如果字符串是 'randomText\F\',我希望它在替换后看起来像 'randomText~'。
解决方案:
我只是决定对它进行 StrReverse 并做一个负面的前瞻。这不是最优雅的解决方案,但在这种情况下似乎有效。
Dim regEx, str1
str1 = StrReverse("The quick \F\ brown \E\F\ dog.")
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Pattern = "\\F\\(?!E\\)"
regEx.Global = True
ReplaceTest = regEx.Replace(str1, "%")
最佳答案
VBScript doesn’t support look-behind assertions.但是试试这个:
(^.?|[^\\].|\\[^E])\\F\\
或这个:
(^.?|(?!\\E)..)\\F\\
用
$1~
替换匹配项(第一个子匹配和 ~
)。这里解释一下: 一般有两种情况: 如果
\F\
前面没有或只有一个字符( ^.?
),一切正常。但是如果\F\
之前至少有两个字符,我们需要确保这些字符不是 \E
.所以我们说,前面的两个字符要么是\
之外的任何字符后跟任意字符( [^\\].
),或 \
后跟除 E
之外的任何字符( \\[^E]
)。 该构造确保除
\E
之外的所有其他组合被允许。这同样适用于第二个表达式。但是这里我们使用否定前瞻断言来确保
\F\
之前的两个字符不是 \E
.
关于regex - VBScript 的正则表达式负回溯替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357769/