由于VBScript不支持lookbehinds,我正在寻找替代解决方案.
我有字符串'\ 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, "%")
Run Code Online (Sandbox Code Playgroud)
VBScript不支持look-behind断言.但试试这个:
(^.?|[^\\].|\\[^E])\\F\\
Run Code Online (Sandbox Code Playgroud)
或这个:
(^.?|(?!\\E)..)\\F\\
Run Code Online (Sandbox Code Playgroud)
将匹配替换为$1~(第一个子匹配和~).
这是一个解释:通常有两种情况:如果在\F\(^.?)之前没有或只有一个字符,一切都可以.但如果之前至少有两个字符\F\,我们需要确保这些字符不是\E.所以我们说,前两个字符也是
\后跟任意字符([^\\].),或\其次是E(\\[^E])之后的任何字符.该构造确保除了\E允许之外的所有其他组合.
这同样适用于第二个表达式.但是在这里我们使用负向前瞻断言来确保之前的两个字符\F\不是\E.