如何在不使用 `(?<!)` 的情况下实现负向后视正则表达式?
How do I implement a negative look-behind regular expression without using `(?<!)`?
我知道 (?<!)
运算符背后的负面看法,但似乎 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]");
}
对于我的情况,它确实有效,但我很确定在极端情况下它不起作用。
您可以使用使用捕获组的变通解决方案:
export function processEmbedded(text: string): string {
return text.replace(/(^|[^!])\[Embedded\]/gm, "![Embedded]");
}
(^|[^!])
匹配行首或第一个捕获组中不是 !
的字符。在替换中,我们使用
反向引用将其放回原处。
我知道 (?<!)
运算符背后的负面看法,但似乎 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]");
}
对于我的情况,它确实有效,但我很确定在极端情况下它不起作用。
您可以使用使用捕获组的变通解决方案:
export function processEmbedded(text: string): string {
return text.replace(/(^|[^!])\[Embedded\]/gm, "![Embedded]");
}
(^|[^!])
匹配行首或第一个捕获组中不是 !
的字符。在替换中,我们使用 反向引用将其放回原处。