Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2013, 15:15
Интересующийся
Отправить личное сообщение для Norm Iridium Посмотреть профиль Найти все сообщения от Norm Iridium
 
Регистрация: 16.05.2010
Сообщений: 19

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>


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

Последний раз редактировалось Norm Iridium, 27.02.2013 в 11:52. Причина: new RegExp требует двойного слеша \\
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2013, 18:20
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

ваша функция неправильно обработает, например, такую строку:
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));
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2013, 18:39
Аватар для Hekumok
Отправить личное сообщение для Hekumok Посмотреть профиль Найти все сообщения от Hekumok
 
Регистрация: 04.06.2012
Сообщений: 513

Мой вариант
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)) ;
__________________
★ ²º¹³ ☆
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2013, 20:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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

</script>

Последний раз редактировалось рони, 20.02.2013 в 20:25.
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2013, 17:29
Интересующийся
Отправить личное сообщение для Norm Iridium Посмотреть профиль Найти все сообщения от Norm Iridium
 
Регистрация: 16.05.2010
Сообщений: 19

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск