Есть задача изменять значение поля input (автоматически делать заглавную букву в начале нового предложения - "чтоб как в word" ) почти получилось при помощи следующей функции
function(){
inputPos = this.selectionStart;
this.value = this.value.replace(/((?:(?:^|[.?!]\s)\s*))(.)/g,
function(m, tail, ch){return tail + ch.toUpperCase()})
this.selectionStart = inputPos;
this.selectionEnd = inputPos;
}
подскажите, как добавить исключение в регулярку, чтобы игнорировались слова длиной в 1 символ (т.к. т.ч. т.е.) и после них буква в слове оставалась строчной
Пример ввода:
"любой текст. меняется по onclick в инпуте! текст произвольный, но
нужно игнорировать сокращения т.е. слова длиной в один символ
заканчивающиеся точкой т.к. такова идея. очень лень шифт нажимать...
ну не дичь ли? вот так"
Пример Вывода:
"Любой текст. Меняется по onclick в инпуте! Текст произвольный, но
нужно игнорировать сокращения т.е. слова длиной в один символ
заканчивающиеся точкой т.к. такова идея. Очень лень шифт нажимать...
Ну не дичь ли? Вот так"
Ответ
Я пока лучше ничего не придумал, но вроде работает:
/(?<=(^|([а-я]{2,})[!?.]{1,}\s))./
Подробности:
(?<= - начало предпросматриваемой незахватывающей группы
(^|([а-я]{2,}) - условие, по которому мы избавляемся от таких сокращенных слов т.е., т.к. и прочих таких сокращений, где стоит меньше 2 символов а-я
[!?.]{1,} - свои спец. символ, по которым осуществляем поиск в пределах от 1+
) - конец предпросматриваемой группы
- выбираем первую нужную нам букву
var string = 'любой текст. меняется по onclick в инпуте!!! ' +
'текст произвольный... нужно игнорировать сокращения т.е. слова ' +
'длиной в один символ заканчивающиеся точкой т.к. такова идея. ' +
'очень лень шифт нажимать... ну не дичь ли!? вот так';
var value = string.replace(/(?<=(^|([а-я]{2,})[!?.]{1,}\s))./gi, function(ch) {
return ch.toUpperCase();
});
console.log(value);
Комментариев нет:
Отправить комментарий