正则表达式中的前瞻和后顾是什么?

3
我想用JavaScript将网站上所有的®符号替换为<sup>®</sup>,但我需要注意只有在没有被<sup>标签包围时才进行替换(可能来自CMS用户)。
我已经尝试了以下代码,但效果不佳: html.replace(/(?<!<sup>.{0,})®(?!.{0,}<\/sup>)/g, "<sup>&reg;</sup>") 它只关心</sup>标签,并且在Safari中无法工作,因为存在“invalid group specifier name”错误。也许这里有人可以帮助我。

你需要使用这种技术,该技术已经在此处进行了扩展说明 - Wiktor Stribiżew
1个回答

1
你可以使用正则表达式替换和回调函数来完成这个操作:

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>标记进行包装。

感谢您的帮助!对于我的问题,这是一个超级简单的解决方案。 - aagJohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接