2016-03-13 37 views
2

我正在努力想出一個合理的解決方案。我需要使用正則表達式替換替換下列字符:⁰¹²³₄₅⁶⁷⁸⁹。我會認爲你只是這樣做:正則表達式來替換所有上標數字

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

然而,當我嘗試這樣做,記事本+ +符號轉換成5-9楷書數字。我意識到這可能與我使用的編碼格式有關,我將其設置爲ANSI。

我從來沒有真正理解各種編碼格式之間的差異。但我想知道這個問題是否有簡單的解決方法?

+0

您是否嘗試過將記事本++編碼設置爲utf8? –

+3

^你應該**總是**正在使用,對於所有的東西 – adeneo

+0

另外,你必須把'/ [⁰¹³³³³]/g'正確地包起來,你錯過了啓動支架 – adeneo

回答

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標記。

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

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

+0

''a⁰a'.replace(/⁰/,'')'工作正常控制檯 –

+0

我不認爲這是一個有效的JavaScript正則表達式,不支持unicode標誌 – adeneo

+0

不支持,不支持正則表達式 - > https://jsfiddle.net/x010mpdp/1/ – adeneo

3

使用UTF-8。如果由於某種原因,你不能,解決方法是逃避

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

我建議嘗試以下的正則表達式:

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

代碼如下

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

var result = str.replace(re, subs); 

結果將包含後成功運行:

2sometext 

S ee demo here