regex - VBScript 的正则表达式负回溯替代方案

标签 regex vbscript

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

    相关文章:

    javascript - 传递一个函数以用正则表达式替换,并将 match 作为 arg

    VBScript 中的类 : Why do these two examples do the same thing?

    error-handling - 在执行期间处理VBScript中的错误

    c++ - 在 vbs 中使用 C++-DLL 时出错

    javascript - 在 String.split() 中使用捕获组

    javascript - 使用javascript匹配字符串中任意长度字符的正则表达式?

    java - 使用正则表达式来分隔单个单词?

    javascript - jQuery - 将条件存储在字符串中并稍后执行

    VBScript - 从 stdout 捕获输出

    testing - 有没有好的支持VBScript的web界面测试工具?