【问题标题】:Regex to replace all superscript numbers正则表达式替换所有上标数字
【发布时间】:2016-06-28 20:44:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你试过将notepad++编码设置为utf8吗?
  • ^ 您应该始终使用它,用于所有事情
  • 另外,你必须正确地把 /[⁰¹²³⁴⁵⁶⁷⁸⁹]/g 包裹起来,你错过了起始括号
  • 你真的必须知道各种字符编码之间的区别。这是必不可少的。这应该有助于开始您的旅程。 kunststube.net/encoding
  • 如果您更正正则表达式(并且 jsFiddle 使用 UTF8) -> jsfiddle.net/x010mpdp,则效果很好

标签: javascript regex string unicode superscript


【解决方案1】:

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

/\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 标记。

var math = document.getElementById("math");

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

【讨论】:

  • 我认为这不是 javascript 中的有效正则表达式,不支持 unicode 标志
  • @adeneo——ECMAScript 2015 支持 Unicode 转义序列(和 u 标志),但似乎还没有很多浏览器实现它们。
  • \p{No} 还匹配不是上标数字的600 other characters
  • @RobG - 确实,不知道。我可以在规范中找到它,但关于浏览器支持的内容不多,似乎它在任何地方都还没有得到真正的支持。但是,OP 的正则表达式工作得很好。
【解决方案2】:

使用 UTF-8。如果由于某种原因你不能,解决方法正在转义

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

【讨论】:

    【解决方案3】:

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

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

    代码看起来像

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

    成功运行后的结果将包含:

    2sometext
    

    在此处查看demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多