Регулярное выражение не понимает кириллицу. Как исправить?
Есть простой скрипт, исправляющий небольшие ошибки за пользователями. Если пользователь поставил после точки строчную букву скрипт делает её заглавной. Работает, но необходимо, чтобы скрипт не делал буквы заглавными после аббревиатур типа и т.д. и т.п. В регулярном выражении на кириллицу скрипт не реагирует, но работает на латинице и не поднимает букву после t.d. Помогите, пожалуйста, исправить. Код следует.
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Test</title> </head> <body> <script> function replaceChars(entry) { var obj = document.forms[0].elements[entry]; var str = obj.value; var re = /(?<!t\.d)\. \S/g; // После точки слова начинаются с большой буквы если это не аббревиатуры while(x = re.exec(str)) str = str.replace(x[0], x[0].toUpperCase()); obj.value = str; } </script> <form> <p>Text</p> <textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea> <p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p> </form> </body> </html> |
javascript_pupil,
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Test</title> </head> <body> <script> function replaceChars(entry) { var obj = document.forms[0].elements[entry]; var str = obj.value; var re = /(?<!(т\.д|т\.п|t\.d))\. \S/g; // После точки слова начинаются с большой буквы если это не аббревиатуры str = str.replace(re, a => a.toUpperCase()) obj.value = str; } </script> <form> <p>Text</p> <textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea> <p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p> </form> </body> </html> |
javascript_pupil,
про run не забывайте О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Цитата:
Код работает, спасибо! Два вопроса остались: 1. Можно ли сделать эту конструкцию IE11* совместимой? 2. Почему всё-таки кириллица не работала, когда латиница нормально? * Как по мне, так IE11 гораздо более быстрый, надежный и удобный, чем многие "современные" браузеры на новых движках. Не зря все монстры типа M$ & CF на него ополчились. Говорят небезопасный, но для администрирования своих собственных сайтов вполне подходит. :) |
javascript_pupil,
Ретроспективная проверка Цитата:
|
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Test</title> </head> <body> <script> function replaceChars(entry) { var obj = document.forms[0].elements[entry]; var str = obj.value; var re = /(\S+)(\. \S)/g; str = str.replace(re, function(a, b, c) { if (!/(т\.д|т\.п|t\.d)$/.test(b)) c = c.toUpperCase(); return b + c }) obj.value = str; } </script> <form> <p>Text</p> <textarea id="text" name="text" style="width:80%; height:400px;" required>Слова после точки начинаются с Заглавной буквы, если это не аббревиатуры типа и т.д. и т.п. как вы поняли и t.d. после которых ставить заглавную не надо. этот текст нужно исправить. и поставить заглавные буквы правильно.</textarea> <p><a href="#" onclick="replaceChars('text'); return false;">Fix!</a></p> </form> </body> </html> Цитата:
|
javascript_pupil,
https://caniuse.com/js-regexp-lookbehind |
Часовой пояс GMT +3, время: 10:47. |