Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярка, сцуко >.< (https://javascript.ru/forum/misc/31008-regulyarka-scuko.html)

Hekumok 23.08.2012 13:09

регулярка, сцуко >.<
 
нужна регулярка, которая ставит пробел после каждого символа, но если встречается символ < или &, то до символа > или ; (соответственно) всё пропускается и ставится пробел только после > или ;
Всё, до чего я додумался, но всё равно не так как нужно:
<div id="div"></div>
<script>
function regular(text) {
text = text.replace(/((?:\<\S\>)|(?:\&)[\s\S]+?(?:\<\/\S\>)|(?:\;))|[\s\S]/gim, function(a) {
return a+'&nbsp;'
}) ;
return document.getElementById('div').innerHTML = text ;
} ;
regular('&lt;b&gt;<b>Aa</b>AbAA&lt;/b&gt;') ;
</script>

Deff 23.08.2012 14:11

function regular(text) {

  var Arr = text.split(/(<[^>]*>|&[^;]*;)/gim);

  var Wstawk = ' '; //'&nbsp;' //Тут поменяешь - если нужен неразрывый пробел

  for(var i=0; i<Arr.length; i++){

     if(Arr[i].search(/<[^>]*>|&[^;]*;/gim)!=-1){

          Arr[i] = Arr[i] + Wstawk;

     } else {

          Arr[i] = Arr[i].replace(/(\S)/gim,'$1' + Wstawk);

     }

  }
  return Arr.join('');

}

alert(regular('&lt;b&gt;<b>Aa</b>AbAA&lt;/b&gt;'));

Hekumok 23.08.2012 15:25

Deff, спасибо)))

nerv_ 23.08.2012 15:40

var text = '&lt;b&gt;<b>Aa</b>AbAA&lt;/b&gt;';

alert(
	text.replace( /(?:&..;|<.+?>|\S)/g, '$& ' )
);

Deff 23.08.2012 15:53

nerv_, +
Красиво ( плюсов нет, - кончились

Hekumok 23.08.2012 21:28

nerv_, спасибо))) супер, ток мне нужно так:
text.replace(/(?:&.+?;|<.+?>|[\S\s])/gmi, '$& ')

т.к. там может быть и &nbsp; а также после пробела мне тоже нужно ставить пробел :) да, и скажите, пожалуйста, что значит
'$& '

nerv_ 23.08.2012 23:32

Цитата:

Сообщение от Hekumok
что значит '$& '

возвращает найденную строку и добавляет к ней пробел. Тогда уж так
text.replace( /(?:&[\da-z]+?;|<[\S\s]+?>|.)/gim, '$& ' );

Hekumok 24.08.2012 00:57

Цитата:

Сообщение от nerv_ (Сообщение 200127)
возвращает найденную строку и добавляет к ней пробел

Не, ну а зачем &? Что он делает?
Цитата:

Сообщение от nerv_ (Сообщение 200127)
Тогда уж так
text.replace( /(?:&[\da-z]+?;|<[\S\s]+?>|.)/gim, '$& ' );

Ну в общем-то да :) спс

Deff 24.08.2012 01:05

Hekumok,
$& => найденная подстрока => http://javascript.ru/basic/regular-e...-stroke-zameny

Hekumok 24.08.2012 02:46

Цитата:

Сообщение от Deff (Сообщение 200156)
Hekumok,
$& => найденная подстрока => http://javascript.ru/basic/regular-e...-stroke-zameny

Deff, спс :) я прост чё-т думал, что $ (а не $&) возвращает найденую подстроку


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