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

Javascript 正则表达式替换所有上标数字,javascript,regex,string,unicode,superscript,Javascript,Regex,String,Unicode,Superscript,我正在努力找出一个合理的解决办法。我需要替换以下字符:⁰¹²³⁴⁵⁶⁷⁸⁹ 使用正则表达式替换。我想你会这么做: item = item.replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g, ''); 然而,当我尝试这样做时,notepad++会将符号5-9转换为常规脚本数字。我意识到这可能与我使用的编码格式有关,我看到它被设置为ANSI 我从来没有真正理解过各种编码格式之间的区别。但是我想知道是否有任何简单的方法可以解决这个问题?这里是查找所有上标数字的简单正则表达式 /\p{No}/gu/

我正在努力找出一个合理的解决办法。我需要替换以下字符:⁰¹²³⁴⁵⁶⁷⁸⁹ 使用正则表达式替换。我想你会这么做:

item = item.replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g, '');
然而,当我尝试这样做时,notepad++会将符号5-9转换为常规脚本数字。我意识到这可能与我使用的编码格式有关,我看到它被设置为ANSI


我从来没有真正理解过各种编码格式之间的区别。但是我想知道是否有任何简单的方法可以解决这个问题?

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

/\p{No}/gu/
细分:

  • \p{No}
    匹配上标或下标数字,或非数字[0-9]的数字
  • u修饰符
    :unicode:模式字符串被视为UTF-16。还导致转义序列与unicode字符匹配
  • g修饰符
    :全局。所有比赛(第一场比赛不返回)

现在,大多数现代浏览器仍然没有内置的对正则表达式中unicode数字的支持。我建议使用
xregexp

XRegExp提供了增强(和可扩展)的JavaScript正则表达式。您可以获得浏览器本机支持的新的现代语法和标志。XRegExp也是一个正则表达式实用工具,它提供了一些工具,可以简化客户端的greping和解析,同时让您不用担心JavaScript正则表达式的一些令人讨厌的方面,如跨浏览器不一致或手动操作lastIndex

HTML解决方案

HTML有一个表示上标文本的
标记

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

如果有上标数字,html标记几乎肯定有
sup
标记

var math=document.getElementById(“math”);
math.innerHTML=math.innerHTML.replace(/[\d]?/g,”)

42+32使用UTF-8。如果由于某种原因你不能,一个解决办法正在逃避

var rg = new RegExp(
  "[\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079]",
  "g"
);

我建议尝试以下正则表达式:

/[\u2070-\u209f\u00b0-\u00be]+/g
代码看起来像

var re = /[\u2070-\u209f\u00b0-\u00be]+/g; 
var str = '⁰¹²³⁴⁵⁶⁷⁸⁹';
var subst = ''; 

var result = str.replace(re, subs);
成功运行后,结果将包含:

2sometext

请参见此处

您是否尝试将记事本++编码设置为utf8?^您应该始终使用utf8,因此,您还必须将其包装起来
/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g
正确地说,您缺少了起始括号。您确实需要知道各种字符编码之间的差异。这很重要。这应该有助于开始您的旅程。如果您更正正则表达式(并且JSFIDLE使用UTF8),效果很好->我认为这在javascript中不是有效的正则表达式,unicode标志不是supported@adeneo-ECMAScript 2015支持Unicode转义序列(和u标志),但似乎还没有多少浏览器实现它们。
\p{No}
也匹配非上标数字。@RobG-确实,我不知道。我可以在规范中找到它,但关于浏览器支持的内容不多,似乎在任何地方都不支持它。但是,OP的正则表达式工作得很好。