我最初有一个全大写的字符串,我希望它是标题大小写:
这是我的STRING,为什么我在喊?
我希望它是
这是我的弦乐,为什么我会大喊?
当字母最初位于CAPS中时,我不能使用CSS text-transform:capitalize。所以我知道我必须使用JS。我尝试了此方法,该方法有效,但我不确定它是否非常有效:
$('.location').each(function () {
var upper = $(this).html();
var lower = upper.toLowerCase();
$(this).replaceWith(lower);
});
现在我的字母实际上是小写字母,我使用CSS text-transform:capitalize
。
有没有更有效的方法? (我已经在网站上使用jQuery,所以这就是我在上面使用它的原因。)
谢谢!
答案 0 :(得分:4)
您可以匹配连续的单词字符,并使用替换功能替换第一个字符(按原样),然后使用其余的toLowerCase()
替换它们:
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);
答案 1 :(得分:2)
另一种可能的解决方案是在String.replace()中使用正则表达式/./g
并检查replacement function是否当前匹配的前一个字符是letter
并且此字符的offset
不是zero
,以决定用lower-case
还是upper-case
版本替换字符。
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);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
答案 2 :(得分:1)
这是一个按空间划分并处理每个数组项的解决方案。
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)
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)
答案 3 :(得分:1)
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)
使用简单的正则表达式并捕获String.replace
中的组。捕获时,您可以按照here on MDN中的说明访问组。
我不知道这是否是效率最高的,但这很简单(即,将来的开发人员很容易迷惑)。
答案 4 :(得分:0)
我使用此等同于PHP的功能:
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()));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>this is all lowercase text</p>
<p>THIS IS ALL UPPERCASE TEXT</p>
如您所见,这不会将大写字母更改为小写字母。如果您想对所有单词强制使用标题大小写,请使用以下方法:
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()));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>this is all lowercase text</p>
<p>THIS IS ALL UPPERCASE text</p>