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

    10-13 07:50