我希望输入的字符串可以以句子格式显示,无论其原来的大小写是什么。
例如:
hi all, this is derp. thank you all to answer my query.
将被转换为:
Hi all, this is derp. Thank you all to answer my query.
我希望输入的字符串可以以句子格式显示,无论其原来的大小写是什么。
例如:
hi all, this is derp. thank you all to answer my query.
将被转换为:
Hi all, this is derp. Thank you all to answer my query.
我想出了这种正则表达式:
var rg = /(^\w{1}|\.\s*\w{1})/gi;
var myString = "hi all, this is derp. thank you all to answer my query.";
myString = myString.replace(rg, function(toReplace) {
return toReplace.toUpperCase();
});
尝试这个,它对你很有效。它也适用于具有前导空格的字符串。
var string="hi all, this is derp. thank you all to answer my query.";
var n=string.split(".");
var vfinal=""
for(i=0;i<n.length;i++)
{
var spaceput=""
var spaceCount=n[i].replace(/^(\s*).*$/,"$1").length;
n[i]=n[i].replace(/^\s+/,"");
var newstring=n[i].charAt(n[i]).toUpperCase() + n[i].slice(1);
for(j=0;j<spaceCount;j++)
spaceput=spaceput+" ";
vfinal=vfinal+spaceput+newstring+".";
}
vfinal=vfinal.substring(0, vfinal.length - 1);
alert(vfinal);
您可以立即将字符串
toLowerCase
,然后只需将每个单词的第一个字母toUpperCase
。变成非常简单的一行代码:
与使每个单词都大写不同。此示例与多行和字符串(如A.M.
和P.M.
)兼容,并且当然适用于在句点和空格字符之后出现的任何单词。
您可以在下面的toLowerCaseNames
函数和toUpperCaseNames
示例中添加自己的自定义单词。
// Based off this post: https://dev59.com/WXVC5IYBdhLWcg3wvT7g#40111894
var str = '-------------------\nhello world!\n\n2 Line Breaks. What is going on with this string. L.M.A.O.\n\nThee End...\nlower case example 1\nlower case example 2\n-------------------\nwait there\'s more!\n-------------------\nhi all, this is derp. thank you all to answer my query.';
function toTitleCase(str) {
return str.toLowerCase().replace(/\.\s*([a-z])|^[a-z]/gm, s => s.toUpperCase());
}
// Add your own names here to override to lower case
function toLowerCaseNames(str) {
return str.replace(/\b(lower case example 1|lower case example 2)\b/gmi, s => s.toLowerCase());
}
// Add your own names here to override to UPPER CASE
function toUpperCaseNames(str) {
return str.replace(/\b(hello|string)\b/gmi, s => s.toUpperCase());
}
console.log(toLowerCaseNames(toUpperCaseNames(toTitleCase(str))));
http://jsfiddle.net/devmgs/6hrv2/
function sentenceCase(strval){
var newstrs = strval.split(".");
var finalstr="";
//alert(strval);
for(var i=0;i<newstrs.length;i++)
finalstr=finalstr+"."+ newstrs[i].substr(0,2).toUpperCase()+newstrs[i].substr(2);
return finalstr.substr(1);
}
要注意的是,句号并不总是表示行末,有时可能是缩写等。此外,也不能确定是否在句号后打了空格。这些条件使得此脚本容易受到攻击。
//=============================
// SentenceCase Function
// Copes with abbreviations
// Mohsen Alyafei (12-05-2017)
//=============================
function stringSentenceCase(str) {
return str.replace(/\.\s+([a-z])[^\.]|^(\s*[a-z])[^\.]/g, s => s.replace(/([a-z])/,s => s.toUpperCase()))
}
//=============================
console.log(stringSentenceCase(" start sentence. second sentence . e.g. a.m. p.m."))
console.log(stringSentenceCase("first sentence. second sentence."))
console.log(stringSentenceCase("e.g. a.m. p.m. P.M. another sentence"))
let rg = /(^\w{1}|\.\s*\w{1})/gi;
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
for(let day of days) {
console.log(day.replace(rg, function(toReplace) {
return toReplace.toUpperCase();
}))
function toSentenceCase(inputString) {
inputString = "." + inputString;
var result = "";
if (inputString.length == 0) {
return result;
}
var terminalCharacterEncountered = false;
var terminalCharacters = [".", "?", "!"];
for (var i = 0; i < inputString.length; i++) {
var currentChar = inputString.charAt(i);
if (terminalCharacterEncountered) {
if (currentChar == ' ') {
result = result + currentChar;
} else {
var currentCharToUpperCase = currentChar.toUpperCase();
result = result + currentCharToUpperCase;
terminalCharacterEncountered = false;
}
} else {
var currentCharToLowerCase = currentChar.toLowerCase();
result = result + currentCharToLowerCase;
}
for (var j = 0; j < terminalCharacters.length; j++) {
if (currentChar == terminalCharacters[j]) {
terminalCharacterEncountered = true;
break;
}
}
}
result = result.substring(1, result.length - 1);
return result;
}
function toTitleCase(str) {
if (!str) return "";
return str
.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) {
return index === 0 ? word.toUpperCase() : word.toLowerCase();
})
.replace(/\s+/g, "");
}
<script>
var name="hi all, this is derp. thank you all to answer my query.";
var n = name.split(".");
var newname="";
for(var i=0;i<n.length;i++)
{
var j=0;
while(j<n[i].length)
{
if(n[i].charAt(j)!= " ")
{
n[i] = n[i].replace(n[i].charAt(j),n[i].charAt(j).toUpperCase());
break;
}
else
j++;
}
newname = newname.concat(n[i]+".");
}
alert(newname);
</script>
这是我最终采用的解决方案:
str = 'hi all, this is derp. thank you all to answer my query.';
temp_arr = str.split('.');
for (i = 0; i < temp_arr.length; i++) {
temp_arr[i]=temp_arr[i].trim()
temp_arr[i] = temp_arr[i].charAt(0).toUpperCase() + temp_arr[i].substr(1).toLowerCase();
}
str=temp_arr.join('. ') + '.';
return str;