Most efficient way to turn all caps into title case with JS or JQuery?
本问题已经有最佳答案,请猛点这里访问。
我有一个字符串原来是所有大写的,我希望它是标题:
THIS IS MY STRING WHY AM I YELLLING?
号
我希望它是:
This Is My String Why Am I Yelling?
号
我不能使用CSS文本转换:当字母最初是大写时大写。所以我知道我必须使用JS。我试过这个方法,但我不确定它是否有效:
1 2 3 4 5 6 7 | $('.location').each(function () { var upper = $(this).html(); var lower = upper.toLowerCase(); $(this).replaceWith(lower); }); |
现在我的字母实际上是小写的,我使用css
有更有效的方法吗?(我已经在这个网站上使用了jquery,所以这就是我上面使用它的原因。)
谢谢!
您可以匹配连续的单词字符,并使用replacer函数替换为第一个字符(按原样),然后使用对其调用的
1 2 3 4 5 6 | const text = 'THIS IS MY STRING WHY AM I YELLLING?'; const output = text.replace( /(\w)(\w*)/g, (_, firstChar, rest) => firstChar + rest.toLowerCase() ); console.log(output); |
另一种可能的解决方案是在string.replace()中使用正则表达式
1 2 3 4 5 6 7 8 | let str ="THIS IS MY STRING WHY AM I YELLLING. WASHINGTON D.C?"; let out = str.replace(/./g, (m, offset, str) => { return (offset !== 0 && /\w/.test(str[offset-1])) ? m.toLowerCase() : m.toUpperCase(); }); console.log(out); |
1 2 | .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} |
。
1 2 3 4 5 | const s = 'THIS IS MY STRING, from WaShInGtOn D.C. WHY AM I YELLLING?' const result = s.replace(/([a-z])([a-z]*)/gi, (_, p1, p2) => p1.toUpperCase() + p2.toLowerCase() ) console.log(result) |
在
我不知道这是否是最有效的,但它相当简单(也就是说,未来的开发者很容易摸索)。
这是一个按空间拆分并处理每个数组项的解决方案。
1 2 3 4 5 | var str = 'THIS IS MY STRING WHY AM I YELLLING?'; var arr = str.split(' '); var result = arr.map(c=> c.charAt(0) + c.toLowerCase().slice(1)); str = result.join(' ') console.log(str) |
号
1 2 3 4 5 | var str = 'THIS IS MY STRING WHY AM I YELLLING?'; var arr = str.split(' '); var result = arr.map(c=> c.charAt(0) + c.toLowerCase().slice(1)); str = result.join(' ') console.log(str) |
我使用这个php等价函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function ucwords(str) { var words = str.split(' '); str = ''; for (var i = 0; i < words.length; i++) { var word = words[i]; word = word.charAt(0).toUpperCase() + word.slice(1); if (i > 0) { str = str + ' '; } str = str + word; } return str; } $(document).ready(function() { $('p').each(function() { $(this).text(ucwords($(this).text())); }); }); |
。
1 2 3 4 5 6 7 8 | <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> <p> this is all lowercase text </p> <p> THIS IS ALL UPPERCASE TEXT </p> |
如您所见,这不会将大写字母更改为小写字母。如果你想在所有单词上强制使用标题框,我使用:
1 2 3 4 5 6 7 8 9 10 11 | function toTitleCase(str) { return str.replace(/\w\S*/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); } $(document).ready(function() { $('p').each(function() { $(this).text(toTitleCase($(this).text())); }); }); |
。
1 2 3 4 5 6 7 8 | <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> <p> this is all lowercase text </p> <p> THIS IS ALL UPPERCASE TEXT </p> |