Показать сообщение отдельно
  #2 (permalink)  
Старый 02.08.2022, 13:42
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Там есть вот такое
Перенос по слогам JavaScript JQuery
$.fn.rusHyphenate = function () {
	var all = '[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]',
		vowel = '[аеёиоуыэюя]',
		consonant = '[бвгджзклмнпрстфхцчшщ]',
		zn = '[йъь]',
		shy = '\xAD',
		hyp = [];

	hyp[0] = new RegExp('(' + zn + ')(' + all + all + ')', 'ig');
	hyp[1] = new RegExp('(' + vowel + ')(' + vowel + all + ')', 'ig');
	hyp[2] = new RegExp('(' + vowel + consonant + ')(' + consonant + vowel + ')', 'ig');
	hyp[3] = new RegExp('(' + consonant + vowel + ')(' + consonant + vowel + ')', 'ig');
	hyp[4] = new RegExp('(' + vowel + consonant + ')(' + consonant + consonant + vowel + ')', 'ig');
	hyp[5] = new RegExp('(' + vowel + consonant + consonant + ')(' + consonant + consonant + vowel + ')', 'ig');

	return this.each(function () {
		var text = $(this).html();

		for ( var i = 0; i <= 5; ++i ) {
			text = text.replace(hyp[i], '$1' + shy + '$2');
		}
		$(this).html(text);
	});
};


$(selector).rusHyphenate();


Вариант с обработкой длины слова
Чтобы переносы были только в длинных словах

$.fn.rusHyphenate = function ( options ) {
	options = $.extend({
		maxWordLength: 15, // максимальная длина слова
	}, options);

	var all       = '[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]',
	    vowel     = '[аеёиоуыэюя]',
	    consonant = '[бвгджзклмнпрстфхцчшщ]',
	    zn        = '[йъь]',
	    shy       = '\xAD',
	    hyp       = [];

	hyp[0] = new RegExp('(' + zn + ')(' + all + all + ')', 'ig');
	hyp[1] = new RegExp('(' + vowel + ')(' + vowel + all + ')', 'ig');
	hyp[2] = new RegExp('(' + vowel + consonant + ')(' + consonant + vowel + ')', 'ig');
	hyp[3] = new RegExp('(' + consonant + vowel + ')(' + consonant + vowel + ')', 'ig');
	hyp[4] = new RegExp('(' + vowel + consonant + ')(' + consonant + consonant + vowel + ')', 'ig');
	hyp[5] = new RegExp('(' + vowel + consonant + consonant + ')(' + consonant + consonant + vowel + ')', 'ig');

	return this.each(function () {
		var text = $(this).html(),
		    res  = '';

		text = text.split(' ');

		text.forEach(function ( word, i ) {
			if( word.length > options.maxWordLength ) {
				for ( var i = 0; i <= 5; ++i ) {
					word = word.replace(hyp[i], '$1' + shy + '$2');
				}
			}


			res += word + ' '
		})

		$(this).html(res);
	});
};



$(selector).rusHyphenate({maxWordLength: 10});
Ответить с цитированием