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

时间:2016-03-13 22:52:43

标签: javascript regex string unicode superscript

我正在努力找到一个合理的解决方案。我需要更换以下字符:⁰¹²³⁴⁵⁶⁷⁸⁹使用正则表达式替换。我认为你会这样做:

item = item.replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g, '');

然而,当我尝试这样做时,记事本++将符号5-9转换为常规脚本编号。我意识到这可能与我使用的编码格式有关,我看到它设置为ANSI。

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

3 个答案:

答案 0 :(得分:3)

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

/\p{No}/gu/

故障:

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

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

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

  

XRegExp提供增强(和可扩展)JavaScript正则表达式。除了浏览器本身支持之外,您还可以获得新的现代语法和标志。 XRegExp也是一个正则表达式实用程序带,提供了一些工具,使您可以更轻松地进行客户端grepping和解析,同时使您免于担心JavaScript正则表达式的麻烦方面,如跨浏览器不一致或手动操作lastIndex。

http://xregexp.com/

HTML解决方案

HTML有<sup>标记用于表示上标文本。

  

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

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

&#13;
&#13;
var math = document.getElementById("math");

math.innerHTML = math.innerHTML.replace(/<sup>[\d]?<\/sup>/g, "");
&#13;
<p id="math">4<sup>2</sup>+ 3<sup>2</sup></p>
&#13;
&#13;
&#13;

答案 1 :(得分:3)

使用UTF-8。如果由于某种原因你无法解决问题,那就是一个解决方法

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

答案 2 :(得分:1)

我建议尝试使用正则表达式:

/[\u2070-\u209f\u00b0-\u00be]+/g

代码看起来像

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

var result = str.replace(re, subs);
成功运行后

结果将包含:

2sometext

请参阅demo此处