代码之家  ›  专栏  ›  技术社区  ›  Archimedes Trajano

如何在不使用“(?<!”)的情况下实现正则表达式后面的否定查找?

  •  0
  • Archimedes Trajano  · 技术社区  · 4 年前

    我知道背后的负面印象 (?<!) 运算符,但Expo/React Native中使用的Javascript引擎似乎不支持它。我想要实现以下几点

    export function processEmbedded(text: string): string {
      return text.replace(/(?<!!)\[Embedded\]/gm, "![Embedded]");
    }
    

    我做的有点粗俗,因为我剥去了衣服,重新添加了。

    export function processEmbedded(text: string): string {
      return text
        .replace(/!\[Embedded\]/gm, "[Embedded]")
        .replace(/\[Embedded\]/gm, "![Embedded]");
    }
    

    在我的案例中,它确实有效,但我非常确定,在边缘案例中,它不起作用。

    1 回复  |  直到 4 年前
        1
  •  3
  •   anubhava    4 年前

    您可以使用捕获组使用此变通解决方案:

    export function processEmbedded(text: string): string {
      return text.replace(/(^|[^!])\[Embedded\]/gm, "$1![Embedded]");
    }
    

    RegEx Demo

    (^|[^!]) 匹配行首或不匹配的字符 ! 第一组。在替换过程中,我们使用 $1 反向引用。