在javascript中将字符串转换为句子大小写
Convert string to sentence case in javascript
我希望输入的字符串在任何情况下都应转换为句子大小写。
喜欢
大家好,我是 DERP。 谢谢大家回答我的疑问。
转换为
大家好,这是德普。谢谢大家回答我的问题。
我想出了这种正则表达式:
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
每个单词的第一个字母。成为一个非常简单的 1 衬里:
而不是每个字都做。此示例与多行和字符串(如 A.M.
和 P.M.
)兼容,当然,与句点和空格字符相关的任何单词兼容。
您可以在该toLowerCaseNames
函数下方添加自己的自定义单词,并在下面的示例中toUpperCaseNames
。
// Based off this post: https://stackoverflow.com/a/40111894/8262102
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))));
<小时 />您可以将上面的所有这些正则表达式粘贴到 https://regexr.com/中,以分解它们的工作方式。
尝试演示
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 代码对我来说效果很好,还可以处理缩写,例如 a.m. 等。可能需要改进。
//=============================
// 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"))
你也可以试试这个
<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;
下面的代码按预期为我工作。
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;
}
我编写了一个基于 FSM 的函数来合并多个空格字符并将字符串转换为句子大小写。它应该很快,因为它不使用复杂的正则表达式或split
并且假设您的 JavaScript 运行时具有有效的字符串连接,那么这应该是最快的方法。它还允许您轻松添加特殊情况的例外。
通过将空格正则表达式替换为比较字符代码的函数,可以进一步提高性能。
function toSentenceCase(str) {
var states = {
EndOfSentence : 0,
EndOfSentenceWS: 1, // in whitespace immediately after end-of-sentence
Whitespace : 2,
Word : 3
};
var state = states.EndOfSentence;
var start = 0;
var end = 0;
var output = "";
var word = "";
function specialCaseWords(word) {
if( word == "i" ) return "I";
if( word == "assy" ) return "assembly";
if( word == "Assy" ) return "Assembly";
return word;
}
for(var i = 0; i < str.length; i++) {
var c = str.charAt(i);
switch( state ) {
case states.EndOfSentence:
if( /'s/.test( c ) ) { // if char is whitespace
output += " "; // append a single space character
state = states.EndOfSentenceWS;
}
else {
word += c.toLocaleUpperCase();
state = states.Word;
}
break;
case states.EndOfSentenceWS:
if( !( /'s/.test( c ) ) ) { // if char is NOT whitespace
word += c.toLocaleUpperCase();
state = states.Word;
}
break;
case states.Whitespace:
if( !( /'s/.test( c ) ) ) { // if char is NOT whitespace
output += " "; // add a single whitespace character at the end of the current whitespace region only if there is non-whitespace text after.
word += c.toLocaleLowerCase();
state = states.Word;
}
break;
case states.Word:
if( c == "." ) {
word = specialCaseWords( word );
output += word;
output += c;
word = "";
state = states.EndOfSentence;
} else if( !( /'s/.test( c ) ) ) { // if char is NOT whitespace
// TODO: See if `c` is punctuation, and if so, call specialCaseWords(word) and then add the puncutation
word += c.toLocaleLowerCase();
}
else {
// char IS whitespace (e.g. at-end-of-word):
// look at the word we just reconstituted and see if it needs any special rules
word = specialCaseWords( word );
output += word;
word = "";
state = states.Whitespace;
}
break;
}//switch
}//for
output += word;
return output;
}
在每一行上,此脚本将打印.....周日 周一 周二 周三 周四 周五 周六。
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 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, "");
}
- 我如何找到一个句子中的所有空格并替换忽略它们
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 使用jQuery检查提交时添加到句子中的单词
- 如何使用javascript标记句子
- 网络语音API-再次讲话(重置句子)
- 需要使用javascript获取输入文本,然后将其添加到句子中
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- JavaScript Regex(?i)选项中字符串大小写不敏感的部分不起作用
- 如何使后缀函数不区分大小写
- 获取特殊字符后没有单词的句子
- 我怎么能用css或(angular)javascript把句子分成两行,只在特定单词后面
- 找出句子中最长的单词——Javascript
- 如何在JavaScript中按大小写拆分字符串
- 将文本更改为驼色大小写
- 将句子大小写应用于可能包含HTML的字符串
- 将句子转换为 InitCap / 骆驼大小写 / 正确大小写
- 将句子或驼峰大小写单词转换为棘壳
- 在javascript中将字符串转换为句子大小写
- 标题大小写一个句子 - 哪个解决方案更好,为什么
- 我如何使用简单的子字符串函数在javascript标题大小写句子