【问题标题】:How do I implement a negative look-behind regular expression without using `(?<!)`?如何在不使用 `(?<!)` 的情况下实现否定的后向正则表达式?
【发布时间】:2021-12-26 22:35:24
【问题描述】:

我知道(?&lt;!) 运算符背后的负面看法,但似乎 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]");
}

在我的情况下它确实有效,但我很确定有一个边缘情况它不起作用。

【问题讨论】:

  • 这个问题和TypeScript有很大关系吗?
  • 我的例子是打字稿
  • 它看起来不像是完全重复的,因为这个问题是关于 typescript 中的lookbehind assertion Alternatives。
  • 更重要的是,它是在不支持负回溯的 iOS 和 Android 的 react-native 中实现的

标签: javascript regex typescript react-native expo


【解决方案1】:

您可以使用捕获组来使用这个变通解决方案:

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

RegEx Demo

(^|[^!]) 匹配第一个捕获组中的行首或不是! 的字符。在替换中,我们使用 $1 反向引用将其放回原处。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多