正则表达式向前看和向后看

Regex lookahead AND lookbehind

我想将我网站上的所有 ® 标志替换为 <sup>®</sup> 和 JavaScript。但我必须注意,如果周围没有 sup(可能来自 CMS 用户),我只会更换它们。

我已经尝试了以下方法,但效果不佳。

html.replace(/(?<!<sup>.{0,})®(?!.{0,}<\/sup>)/g, "<sup>&reg;</sup>")

它只关心 </sup> 标签,在 Safari 中不起作用,因为“组说明符名称无效”。也许这里有人可以帮助我。

您可以使用正则表达式替换替换和回调:

var input = "Hello ® and also <sup>®</sup>";
var output = input.replace(/<sup>®<\/sup>|®/g, (x) => x === "<sup>®</sup>" ? x : "<sup>®</sup>");
console.log(output);

交替逻辑首先急切地尝试查找 <sup>®</sup> 次出现。如果失败,它还会尝试查找任何其他 ® 事件。然后,在回调中,我们仅在尚未包装的情况下使用 <sup> 标签进行包装。