Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Добавить исключение в регулярное выражение

Есть задача изменять значение поля 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);

Комментариев нет:

Отправить комментарий