正则表达式替换所有上标数字

COM*_*ARD 3 javascript regex string unicode superscript

我正在努力寻找一个合理的解决方案。我需要替换以下字符:?¹²³?????? 使用正则表达式替换。我认为您会这样做:

item = item.replace(/[?¹²³??????]/g, '');
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,notepad ++会将符号5-9转换为常规脚本编号。我意识到这可能与我正在使用的编码格式有关,我将其设置为ANSI。

我从来没有真正了解过各种编码格式之间的区别。但是我想知道是否有解决此问题的简便方法?

Ric*_*ton 5

这是用于查找所有上标数字的简单正则表达式

/\p{No}/gu/
Run Code Online (Sandbox Code Playgroud)

分解:

  • \p{No} 匹配上标或下标数字,或者不是数字的数字[0-9]
  • u modifier:unicode:模式字符串被视为UTF-16。也导致转义序列匹配unicode字符
  • g modifier:全球。所有比赛(在第一个比赛中不返回)

https://regex101.com/r/zA8sJ4/1

现在,大多数现代浏览器仍未在regex中内置对unicode码的支持。我建议使用xregexp图书馆

XRegExp提供增强(和可扩展)的JavaScript正则表达式。您将获得新的现代语法和标志,而浏览器本身不支持。XRegExp还是regex实用程序带,其工具可简化客户端grep和解析,同时使您不必担心JavaScript regexe的烦人方面,例如跨浏览器不一致或手动操作lastIndex。

http://xregexp.com/

HTML解决方案

HTML具有<sup>用于表示上标文本的标签。

标签定义上标文本。上标文字显示在法线上方半个字符,有时以较小的字体呈现。上标文本可用于脚注,例如WWW [1]。

如果有上标数字,则html标记几乎肯定具有sup标签。

/\p{No}/gu/
Run Code Online (Sandbox Code Playgroud)
var math = document.getElementById("math");

math.innerHTML = math.innerHTML.replace(/<sup>[\d]?<\/sup>/g, "");
Run Code Online (Sandbox Code Playgroud)