Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   REGEXP сократить слово по согласной букве (https://javascript.ru/forum/project/35708-regexp-sokratit-slovo-po-soglasnojj-bukve.html)

Norm Iridium 19.02.2013 15:15

REGEXP сократить слово по согласной букве
 
Сделал для своих нужд. Может кому пригодится:

<script language="JavaScript" type="text/javascript">
s='привет мир! тест границ слов - кириллица, 45454 тепло-централь, Производительность/ректификация, л/час.';

function reduction_words(s,lim){
  var t = s.split(/[^а-яё\w]+/);
  for(var i=0; i<t.length; i++)
      if(t[i].length>lim)
          s = s.replace(t[i], t[i].replace(t[i].replace(new RegExp('[а-яё\\w]{1,'+lim+'}[^аеёиоуыьъэюяyeuioa]','i'),''),'')+'.');
  return s;
}

document.write(reduction_words(s,7));
//привет мир! тест границ слов - кириллиц., 45454 тепло-централ., Производ./ректифик., л/час.
</script>


Думаю можно упростить код, но не было времени.

Hekumok 20.02.2013 18:20

ваша функция неправильно обработает, например, такую строку:
454542013 __proto__

s='тест границ слов - 454542013 __proto__';

function reduction_words(s,lim){
  var t = s.split(/[^а-яё\w]+/);
  for(var i=0; i<t.length; i++)
      if(t[i].length>lim)
          s = s.replace(t[i], t[i].replace(t[i].replace(new RegExp('[а-яё\w]{1,'+lim+'}[^аеёиоуыьъэюяyeuioa]','i'),''),'')+'.');
  return s;
}

alert(reduction_words(s,7));

Hekumok 20.02.2013 18:39

Мой вариант
var str = 'привет мир! Бесперспективный: тест границ слов - кириллица, 454542013 __proto__ тепло-централь, Производительность/ректификация, л/час.' ;
function crop(str, lim) {
str = str.replace(new RegExp("[а-яёa-z]{"+lim+"}[а-яёa-z]*", "ig"), function(a) {
if(a.length==lim||a.length==lim+1) return a ;
for(var i=lim-1; i>=0; i--) {
var r = new RegExp("^[а-яёa-z]{"+i+"}[^аеёиоуыьъэюяyeuioa]", "i") ;
if(r.test(a)) {
a = a.substring(0, i+1)+"." ;
break ;
} ;
} ;
return a ;
}) ;
return str ;
} ;
alert(crop(str, 7)) ;

рони 20.02.2013 20:11

мда ....
<script language="JavaScript" type="text/javascript">
var s = 'привет мир! Бесперспективный: карамель тест границ слов - кириллица, 454542013 __proto__ тепло-централь, Производительность/ректификация, л/час.' ;
document.write("<br />"+s.replace(/([а-яё]{5,6}[бвгджзклмнпрстФхцчшщ])(?![\sьъ])[а-яё]*/gim,"$1."))

</script>

Norm Iridium 21.02.2013 17:29

Всем спасибо! Особенно рони ;) Я знал что можно упростить и сделать более изящнее.


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