2016-03-13 2 views
2

Я изо всех сил пытаюсь найти разумное решение. Мне нужно заменить следующие символы: ⁰¹²³⁴⁵⁶⁷⁸⁹ с заменой регулярного выражения. Я думаю, что вы бы просто сделать это:Regex для замены всех верхних номеров

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

Однако, когда я пытаюсь сделать это, Notepad ++ преобразует символы 5-9 в обычные числа сценариев. Я понимаю, что это, вероятно, относится к формату кодирования, который я использую, который, как мне кажется, установлен в ANSI.

Я никогда не понимал разницу между различными форматами кодирования. Но мне интересно, есть ли какие-либо легкие исправления для этой проблемы?

+0

Вы пробовали установить кодировку noepad ++ в utf8? –

+3

^, который вы должны ** всегда использовать **, для всего – adeneo

+0

Кроме того, вы должны обернуть это '/ [⁰¹²³⁴⁵⁶⁷⁸⁹]/g' правильно, вам не хватает стартового кронштейна – adeneo

ответ

3

Вот простое регулярное выражение для нахождения всех надстрочного номера

/\p{No}/gu/ 

Разбивка:

  • \p{No} совпадает с верхним или нижним индексом цифры, или число, которое не является цифра [0-9]
  • u modifier: unicode: Строки шаблонов обрабатываются как UTF-16. Также приводит к тому, что escape-последовательности соответствуют символам Unicode
  • g modifier: global. Все матчи (не возвращаются на первый матч)

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

Теперь, большинство современных браузеров до сих пор не имеют встроенную поддержку для чисел Юникода в регулярных выражениях. Я бы рекомендовал использовать библиотеку xregexp

XRegExp предоставляет расширенные (и расширяемые) регулярные выражения JavaScript. Вы получаете новый современный синтаксис и флаги, помимо того, что браузеры поддерживают изначально. XRegExp также представляет собой пояс службы регулярных выражений с инструментами, облегчающими работу на стороне клиента и синтаксический анализ, освобождая вас от беспокойства по поводу отвратительных аспектов 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 здесь