将字符串中的单词大写的最佳方法是什么?
将字符串中的单词大写的最佳方法是什么?
Answers:
/**
* Capitalizes first letters of words in string.
* @param {string} str String to be modified
* @param {boolean=false} lower Whether all other letters should be lowercased
* @return {string}
* @usage
* capitalize('fix this string'); // -> 'Fix This String'
* capitalize('javaSCrIPT'); // -> 'JavaSCrIPT'
* capitalize('javaSCrIPT', true); // -> 'Javascript'
*/
const capitalize = (str, lower = false) =>
(lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;
capitalize(' javascript'); // -> ' Javascript'
capitalize('бабушка курит трубку'); // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol') // -> 'Località Àtilacol'
capitalize(`"quotes" 'and' (braces) {braces} [braces]`); // -> "Quotes" 'And' (Braces) {Braces} [Braces]
'CHECK THIS OUT'.capitalize(true) -> "Check This Out"
。思维true
参数。
使用ES6的箭头功能,最短的将字符串中的单词大写的实现如下:
'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'
与ES5兼容的实现:
'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'
正则表达式基本上匹配给定字符串中每个单词的首字母,并将该字母仅转换为大写:
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
此正则表达式匹配给定字符串中的第一个字母和每个非空白字母,后跟空白,并将该字母仅转换为大写:
/(?:^|\s)\S/g
尽管g
我们的正则表达式中的标记无论如何都不会捕获子组,但在这里可以按如下方式使用非捕获组。
干杯!
päijät-häme
成为PäIjäT-HäMe
EisbäRen
例如,这是一个结果。
Päijät-Häme
,但至少在Chrome空白中不包含破折号(-),因此名称的第二部分未大写。可以固定为/(^|\s|-)\S/g
。
function capitalize(s){
return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};
capitalize('this IS THE wOrst string eVeR');
输出:“这是有史以来最糟糕的字符串”
看来此解决方案取代了我的解决方案:https : //stackoverflow.com/a/7592235/104380
将通过VSYNC提供答案的工作,只要你没有重音字母输入字符串。
我不知道原因,但显然\b
在regexp匹配中也加了重音字母(在IE8和Chrome上测试),因此,像这样的字符串"località"
会被大写错误地转换成"LocalitÀ"
(该à
字母被大写,因为regexp认为这是单词边界)
这个也可以用于重音字母的更通用的功能是:
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
您可以像这样使用它:
alert( "hello località".toCapitalize() );
" javascript".toCapitalize() -> " javascript"
由于每个人都为您提供了您所要求的JavaScript答案,因此我将介绍CSS属性text-transform: capitalize
将完全做到这一点。
我意识到这可能不是您要的-您没有给我们提供运行此操作的上下文-但是,如果仅出于演示目的,我肯定会选择CSS替代品。
jQuery的John Resig将由John Gruber编写的perl脚本移植到JavaScript。该脚本以更智能的方式大写,例如,不大写“ of”和“ and”之类的小写字母。
您可以在这里找到它:JavaScript中的标题大写
使用JavaScript和html
String.prototype.capitalize = function() {
return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
<form name="form1" method="post">
<input name="instring" type="text" value="this is the text string" size="30">
<input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
<input name="outstring" type="text" value="" size="30">
</form>
基本上,您可以这样做,string.capitalize()
并且每个单词的第一个字母都会大写。
来源:http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
if (object.capitalize) {...} else {String.prototype.capitalize = function()....}
对象是类型的String
。所以,这真的很简单。
Ivo的回答很好,但是我更喜欢不匹配,\w
因为不需要大写0-9和AZ。我们可以忽略这些,仅在az上匹配。
'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'
这是相同的输出,但是我认为在自记录代码方面更加清晰。
"Är Toaletten"
。在提供了很好的回答之后,您的回答没有提供讨论
/\b\w/g
对于非英文字母也失败。并非每个人都处理unicode字符,这将帮助那些不需要的人。
console.log( _.capitalize('ÿöur striñg') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
简洁的ES6方法可能看起来像这样。
const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)
这只会大写第一个字母,不会影响句子其余部分的大小写。
这应该涵盖大多数基本用例。
const capitalize = (str) => {
if (typeof str !== 'string') {
throw Error('Feed me string')
} else if (!str) {
return ''
} else {
return str
.split(' ')
.map(s => {
if (s.length == 1 ) {
return s.toUpperCase()
} else {
const firstLetter = s.split('')[0].toUpperCase()
const restOfStr = s.substr(1, s.length).toLowerCase()
return firstLetter + restOfStr
}
})
.join(' ')
}
}
capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week
编辑:改进了映射的可读性。
/\b\w/g
...
该解决方案不使用正则表达式,支持带重音符号的字符,并且几乎每个浏览器都支持该解决方案。
function capitalizeIt(str) {
if (str && typeof(str) === "string") {
str = str.split(" ");
for (var i = 0, x = str.length; i < x; i++) {
if (str[i]) {
str[i] = str[i][0].toUpperCase() + str[i].substr(1);
}
}
return str.join(" ");
} else {
return str;
}
}
用法:
console.log(capitalizeIt('çaoJava程序内部的第二个'));
输出:
Çao第二个内部Javascript程序
我的解决方案:
String.prototype.toCapital = function () {
return this.toLowerCase().split(' ').map(function (i) {
if (i.length > 2) {
return i.charAt(0).toUpperCase() + i.substr(1);
}
return i;
}).join(' ');
};
例:
'álL riGht'.toCapital();
// Returns 'Áll Right'
'a áAA. bb . bbb .cc .d'.toCapital();
=>a Áaa. bb . Bbb .cc .d
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html是许多答案之一。
Google可以解决这些问题。
幼稚的方法是用空格分割字符串,将结果数组的每个元素的首字母大写并将其重新连接在一起。这就使现有的大写字母单独存在(例如,HTML保留HTML,不会像Html那样变得愚蠢)。如果您不希望这样,请在拆分之前将整个字符串变成小写。
该代码在点后大写单词:
function capitalizeAfterPeriod(input) {
var text = '';
var str = $(input).val();
text = convert(str.toLowerCase().split('. ')).join('. ');
var textoFormatado = convert(text.split('.')).join('.');
$(input).val(textoFormatado);
}
function convert(str) {
for(var i = 0; i < str.length; i++){
str[i] = str[i].split('');
if (str[i][0] !== undefined) {
str[i][0] = str[i][0].toUpperCase();
}
str[i] = str[i].join('');
}
return str;
}
我喜欢简单的过程。首先将字符串更改为Array以便于迭代,然后使用map函数根据需要更改每个单词。
function capitalizeCase(str) {
var arr = str.split(' ');
var t;
var newt;
var newarr = arr.map(function(d){
t = d.split('');
newt = t.map(function(d, i){
if(i === 0) {
return d.toUpperCase();
}
return d.toLowerCase();
});
return newt.join('');
});
var s = newarr.join(' ');
return s;
}
jQuery或Javascipt没有提供实现此目的的内置方法。
CSS测试转换(text-transform:capitalize;)并未真正大写字符串的数据,而是在屏幕上显示了大写的呈现。
如果您正在寻找使用普通vanillaJS在数据级别实现此目标的更合法方法,请使用此解决方案=>
var capitalizeString = function (word) {
word = word.toLowerCase();
if (word.indexOf(" ") != -1) { // passed param contains 1 + words
word = word.replace(/\s/g, "--");
var result = $.camelCase("-" + word);
return result.replace(/-/g, " ");
} else {
return $.camelCase("-" + word);
}
}
您可以使用以下命令将字符串中的单词大写:
function capitalizeAll(str){
var partes = str.split(' ');
var nuevoStr = "";
for(i=0; i<partes.length; i++){
nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim();
}
return nuevoStr;
}
还有locutus:https ://locutus.io/php/strings/ucwords/以这种方式定义它:
function ucwords(str) {
// discuss at: http://locutus.io/php/ucwords/
// original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// improved by: Waldo Malqui Silva (http://waldo.malqui.info)
// improved by: Robin
// improved by: Kevin van Zonneveld (http://kvz.io)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
// input by: James (http://www.james-bell.co.uk/)
// example 1: ucwords('kevin van zonneveld')
// returns 1: 'Kevin Van Zonneveld'
// example 2: ucwords('HELLO WORLD')
// returns 2: 'HELLO WORLD'
// example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
// returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
// example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
// returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'
return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
return $1.toUpperCase();
});
};
text-transform:capitalize;
。