由于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/