修复Sentence Case工具:实现所有句子首字母大写功能
修复Sentence Case功能:让每个句子首字母大写
问题根源
当前sentenceCase函数仅将整个字符串的第一个字符转为大写,未识别句子结束符(如./?/!)后的新句子,导致只有第一句首字母大写。
修复方案
替换原有的sentenceCase函数为以下实现:
function sentenceCase(str) { // 先统一转为小写,处理单独的"i"为大写 let processedStr = str.toLowerCase().replace(/\si\s/g, ' I '); // 匹配句子开头的字符并转为大写 processedStr = processedStr.replace(/(^\w|[.!?]\s*\w)/g, match => match.toUpperCase()); return processedStr; }
代码说明
str.toLowerCase():将所有字符转为小写,统一基础格式replace(/\si\s/g, ' I '):保留单独的"i"为大写(如"i am"转为"I am")replace(/(^\w|[.!?]\s*\w)/g, ...):正则匹配两种位置的字符并转为大写:^\w:字符串的第一个单词首字符[.!?]\s*\w:句子结束符(.?!)后(可跟任意数量空格)的第一个单词首字符
修改后的完整JavaScript代码
// LowerCase, Title And Sentence Case Converter Tool var stringbox = document.getElementById('stringbox') var wordcountspan = document.getElementById('wordcount') var charcountspan = document.getElementById('charcount') function convertstring(textarea, action) { if (action == 'sentencecase') { textarea.value = sentenceCase(textarea.value) } else if (action == 'titlecase') { textarea.value = toTitleCase(textarea.value) } else if (action == 'capitalcase') { textarea.value = CapitalCase(textarea.value) } else if (action == 'lowercase') { textarea.value = lowerCase(textarea.value) } else if (action == 'uppercase') { textarea.value = upperCase(textarea.value) } return false } function sentenceCase(str) { let processedStr = str.toLowerCase().replace(/\si\s/g, ' I '); processedStr = processedStr.replace(/(^\w|[.!?]\s*\w)/g, match => match.toUpperCase()); return processedStr; } //reference: https://github.com/gouch/to-title-case function toTitleCase(str) { var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i; var str = str.toLowerCase() return str.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function(match, index, title) { if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && title.charAt(index - 1).search(/[^\s-]/) < 0) { return match.toLowerCase(); } if (match.substr(1).search(/[A-Z]|\../) > -1) { return match; } return match.charAt(0).toUpperCase() + match.substr(1); }); }; //reference: https://medium.freecodecamp.com/three-ways-to-title-case-a-sentence-in-javascript-676a9175eb27 function CapitalCase(str) { return str.toLowerCase().split(' ').map(function(word) { return (word.charAt(0).toUpperCase() + word.slice(1)); }).join(' '); } function lowerCase(str) { return str.toLowerCase(); } function upperCase(str) { return str.toUpperCase(); } function wordandcharcount() { wordcountspan.innerHTML = stringbox.value.split(' ').length charcountspan.innerHTML = stringbox.value.length } stringbox.addEventListener('input', function() { wordandcharcount() }, false) wordandcharcount()
HTML代码(无需修改)
<textarea id="stringbox"></textarea> <span id="wordcount"></span> <span id="charcount"></span>
内容的提问来源于stack exchange,提问作者vectorization
相关产品推荐
相关产品推荐

