我想替换所有®
在我的网站上登录 <sup>®</sup>
使用 JavaScript。但我必须注意,如果周围没有支撑物(可能来自 CMS 用户),我只会更换它们。
我已经尝试了以下方法,但效果不佳。
html.replace(/(?<!<sup>.{0,})®(?!.{0,}<\/sup>)/g, "<sup>®</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>
换行仅在尚未包装时才标记。
关于javascript - 正则表达式向前看和向后看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71349235/