2016-11-18 58 views
1

如何在字符串开头和点(。)符号之后大写每个单词?在每个点(。)和字符串开始后大写单词

我做了谷歌计算器研究,以下是我实现但这只会利用字符串的开始的代码。示例如下:

var str = 'this is a text. hello world!'; 
 
str = str.replace(/^(.)/g, str[0].toUpperCase()); 
 
document.write(str);

我希望字符串是This is a text. Hello world!.

我曾尝试使用CSS,text-transform: capitalize;但是这将导致每个字被利用。

+0

的可能的复制[字符串转换为一句JavaScript的情况下(http://stackoverflow.com/questions/19089442/convert-string-to-sentence-case-in-javascript) – Fiddles

+0

也请参阅http: //stackoverflow.com/q/37457557/405180 – Fiddles

回答

2

我使用类似这样的函数,它接受一个可选的第二个参数,该参数将首先将整个字符串转换为小写字母。原因是有时你有一系列Title Case Items. That You Wish变成一系列Title case items. That you wish作为判例。

function sentenceCase(input, lowercaseBefore) { 
    input = (input === undefined || input === null) ? '' : input; 
    if (lowercaseBefore) { input = input.toLowerCase(); } 
    return input.toString().replace(/(^|\. *)([a-z])/g, function(match, separator, char) { 
     return separator + char.toUpperCase(); 
    }); 
} 

正则表达式的工作原理如下

1st Capturing Group (^|\. *) 
    1st Alternative^
     ^asserts position at start of the string 
    2nd Alternative \. * 
     \. matches the character `.` literally (case sensitive) 
     * matches the character ` ` literally (case sensitive) 
     * Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
2nd Capturing Group ([a-z]) 
    Match a single character present in the list below [a-z] 
    a-z a single character in the range between a (ASCII 97) and z (ASCII 122) (case sensitive) 

你会实现它在你的榜样,像这样:

var str = 'this is a text. hello world!'; 
str = sentenceCase(str); 
document.write(str); // This is a text. Hello world! 

jsfiddle

PS。在未来,我觉得regex101了解和测试正则表达式的

+0

谢谢@haxxxton。它的工作很棒! – Amran

+0

@Amran,不客气,请考虑将此答案标为正确,以便其他人可以找到此解决方案 – haxxxton

+0

替换函数如何工作?对不起,但我很困惑 – Amran

1

如果您正在使用jQuery,使用此代码

function capitalize(str) { 
    return str.charAt(0).toUpperCase() + str.slice(1); 
} 
var str = "my name is Jhon. are you good. is it"; 
var str1 = str.split('.'); 
var str2 = ""; 
$.each(str1,function(i){ 
    str2 += capitalize($.trim(str1[i]))+'. '; 
}); 
console.log(str2); 

渔获出来放在str2一个非常有用的工具。 在我的情况如下。

My name is Jhon. Are you good. Is it. 
+0

我可以知道我在函数(i) – Amran

+0

中我是什么,我是循环的索引,从0开始到数组长度 –

+0

Ic,在你的例子中它会停在索引1上。我是否正确? – Amran

相关问题