Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Цифры в подстрочный регистр... (https://javascript.ru/forum/misc/12871-cifry-v-podstrochnyjj-registr.html)

Semen 06.11.2010 16:21

Цифры в подстрочный регистр...
 
Вот встала задача записывать цифры (например при вводе формул химических) в подстрочный регистр, написал:
var fou="H2SO4";
var m=fou.split('');
for(var i=0; i<m.length; i++){
	if(m[i]=='0' || m[i]=='1' || m[i]=='2' || m[i]=='3' || m[i]=='4' || m[i]=='5' || m[i]=='6' || m[i]=='7' || m[i]=='8' || m[i]=='9') m[i]='<sub>'+m[i]+'</sub>';
}
var fou=m.join('');


работает, но както оно некрасиво получается. Подскажите как тут сократить код, сделать его компактнее (вопрос чисто интереса).
Пытался записать список цифр в операцию сравнения в виде регулярного выражения (чтоб обойтись без || ) - неполучилось... :no:

Sweet 06.11.2010 17:56

В таких случаях нужно пользоваться регулярными выражениями. Например, так:
<div>2H2 + O2 = 2H2O</div>
<script>
var div = document.getElementsByTagName('div')[0],
    formula = div.innerHTML,
    newFormula = formula.replace(/(\w)(\d)/g, function(){
      return arguments[1] + '<sub>' + arguments[2] + '</sub>';
    });
div.innerHTML = newFormula;
</script>

Semen 06.11.2010 18:33

Вот спасибо - работает :)

Semen 06.11.2010 19:03

Работает, но не со всеми формулами: UO2(NO3)2 - последняя двойка не переводится в нижний регистр из-за скобок. Я делал вариант с replace и у меня получалась вот такая же штука... (поэтому пришел к приведенному мной примеру)...

monolithed 06.11.2010 19:18

Плохо прочитали:
<div>2H2 + UO2(NO3)2 != (2H)2O</div>
<script>
var div = document.getElementsByTagName('div')[0],
    formula = div.innerHTML,
    newFormula = formula.replace(/([\w)])(\d)/g, function(){
      return arguments[1] + '<sub>' + arguments[2] + '</sub>';
    });
div.innerHTML = newFormula;
</script>

Semen 06.11.2010 19:24

Спасибо, да видимо плохо прочитал, мне вообще тяжело дается понимание темы регулярные выражения :(


Часовой пояс GMT +3, время: 19:40.