2017-07-18 64 views
1

我想從文本中移除所有上標和下標字符。從字符串中替換上標和下標字符Javascript

Exp:'⁰'

我發現example on stackoverflow,但它只考慮上標數字而不考慮字符或下標。

任何人都知道如何做到這一點?一種方法是將所有可能的上標和下標逐一替換,但這有點不切實際。

+1

難道這些字符都在http://www.fileformat.info/info/unicode/block/superscripts_and_subscripts/list.htm上市?此外,請參閱http://unicode.org/charts/PDF/U2070.pdf –

+0

我想沒有辦法,只能將這些字符的長列表並在循環中逐一替換它們 –

+0

爲什麼循環,如果您需要刪除這些字符?你可以請示例一個字符串和期望的輸出?順便說一下,這個列表是否涵蓋了你需要的字符?試試'.replace(/ [\ u2070 \ u2074-\ u208E \ u2090- \ u209C] +/g,'')' –

回答

1

基礎上subscript and superscript Unicode range reference,並在UniView tool爲「標」和「上標」手動搜索,你可以使用

.replace(/[\u006E\u00B0\u00B2\u00B3\u00B9\u02AF\u0670\u0711\u2121\u213B\u2207\u29B5\uFC5B-\uFC5D\uFC63\uFC90\uFCD9\u2070\u2071\u2074-\u208E\u2090-\u209C\u0345\u0656\u17D2\u1D62-\u1D6A\u2A27\u2C7C]+/g, '') 

regex demo

+量詞(一次或多次連續出現)將使正則表達式引擎一次性移除整個1+子/上標字符塊。

請注意ᵀᴹ修飾符字母並且不是正式的上標字符。如果你想有他們,你需要

var res = s.replace(/(?:\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0]|[\u006E\u00B0\u00B2\u00B3\u00B9\u02AF\u0670\u0711\u2121\u213B\u2207\u29B5\uFC5B-\uFC5D\uFC63\uFC90\uFCD9\u2070\u2071\u2074-\u208E\u2090-\u209C\u0345\u0656\u17D2\u1D62-\u1D6A\u2A27\u2C7C\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E\uFF9F])+/g, '') 

this demo

+0

這似乎不起作用。我試過了「ᵀᴹ」.replace(/ [\ u2070 \ u2074- \ u208E \ u2090- \ u209C] +/gi,'')和「¹²³」.replace(/ [\ u2070 \ u2071 \ u2074- \ u208E \ u2090- \ u209C] +/g,''),沒有任何東西被替換。順便說一句,謝謝你的支持 –

+1

那些'ᵀᴹ'是修飾字母。你是否也想匹配那樣的修飾符? –

+0

上標或下標中的所有內容都會導致我的工作應用程序出現問題,我想刪除所有內容。請注意,即使是「123」也不會從您發佈的正則表達式中取代。我在Chrome控制檯上測試了它 –