-
1 有各种方法,我们有一些性能统计数据吗? – 阿努巴夫 评论 2016年10月2日12:18 -
1 @Anubhav是的 我们现在确实有一个基准 – 尤利塞BN 评论 2020年11月19日10:57 -
2 现在是2022年,浏览器仍然没有实现这一点的本机功能。 – Sơn Trần-Nguyễn 评论 2022年6月30日3:23 -
1 这样的外壳完全取决于语言/位置/文化。 – 詹姆斯·摩尔 评论 2022年8月10日20:54 -
我希望解决方案的测试用例之一是“ComhráI mBáC le Seán Nguyen”——祝你好运! 基本上,即使考虑到大量的机器学习资源,认为计算机可以完成所谓的“标题套管”的想法可能也是没有希望的。 – 詹姆斯·摩尔 评论 2022年8月10日21:11
69个答案
函数toTitleCase(str){ 返回str.replace( /\w\S*/g, text=>text.charAt(0).toUpperCase()+text.substring(1).toLowerCase( ); } const示例=“john smith”; log(`“${example}”变为“${toTitleCase(example)}”`);
const输入=document.querySelector('[名称=“input”]'); const输出=document.querySelector('[名称=“output”]'); input.addEventListener('change',()=>{ output.value=toTitleCase(输入值); }); input.addEventListener('keyup',()=>{ output.value=toTitleCase(输入值); }); output.addEventListener('click',()=>output.select()); 函数toTitleCase(str){ 返回str.replace( /\w\S*/g, text=>text.charAt(0).toUpperCase()+text.substring(1).toLowerCase( ); }
<表格> 输入:<br/> <textarea name=“input”></textarea> <br/> 输出:<br/> <textarea name=“output”只读> </form>
-
19 谁能解释一下,为什么 \带\ S* 使用,而不是 \w个+ 或 \w个* 例如? 我不知道,为什么你想包含除空格以外的任何内容,从而进行更改 吉姆·鲍伯 到 Jim-bob公司 . – 马丁泽威 评论 2013年1月9日9:17 -
5 -
16 -
27 如果 吉姆博布 --> 吉姆·鲍伯 是你的愿望,你应该这样做 /\b\w+/g 。示例: str.replace(/\b\w+/g,函数{return s.charAt(0).to UpperCase()+s.substr(1).to LowerCase();}); – 伏特7ron 评论 2014年1月17日17:20 -
8 \带\S* 使用而不是 \w个+ 或 \w个* 所以像这样的话 不要 不要修改为 不要 ,但正如其他人指出的那样 \带\S* 导致连字符单词出现问题。 评论 2017年2月1日14:59
文本转换:大写;
-
70 -1.这个css有效,但并不像大多数人预期的那样有效,因为如果文本以大写字母开头,就没有效果。 webmasterworld.com/forum83/7506.htm – 李·惠特尼三世 评论 2011年8月23日17:37 -
74 -
16 -
24 -
三
String.prototype.toPropertyCase=函数(){ return this.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(;}); };
“pascal”.toPropertCase();
-
5 -
20 @daniellmb为什么他不应该改变字符串原型? 我认为这是一个很好的解决方案。 想想ruby开放类,将函数添加到现有类中是完全有效的,并且它被广泛接受。 – 马尔科·菲塞特 评论 2012年9月21日15:31 -
120 @马可·菲塞特因为它和其他人玩得不好! 当您有两个库都试图用不兼容的更改修改本机JavaScript对象时,就会发生不好的情况。 想象一下,如果jQuery和GoogleMaps遵循这种设计模式,那么您不可能在同一个页面上同时拥有这两种功能。 评论 2012年9月21日17:28 -
6 -
71 我觉得“不要修改本地JavaScript对象”语句就像“永远不要使用goto”或“eval是邪恶的”。 很多情况下都可以。如果你对你的项目有完全的控制权,当然也不打算将其作为库发布,我认为这种方法没有问题。 – 福克斯穆德900 评论 2015年6月23日9:15
const str=“foo bar baz”; const newStr=str.split(“”) .map(w=>w[0].toUpperCase()+w.substring(1).toLowerCase( .join(“”); console.log(newStr);
-
三 或者,您可以将映射中的子字符串小写: str.split('').map(i=>i[0].toUpperCase()+i.substring(1).toLowerCase()).join('') – 戴夫·兰德 评论 2016年8月15日16:39 -
12 我不同意打电话 .to下壳体() 。“McDonald”等名称或“ASAP”等首字母缩写词应保留大写字符。 如果有人实际上传入了类似“heLLO”的字符串,应用程序不应假定大写字母不正确。 – 托马斯·希金波坦 评论 2017年2月1日18:22 -
1 @托马斯·希金波坦这个怎么样? String.prototype.toTitleCase=函数(blnForceLower){var strReturn – 肖恩·肯德尔 评论 2017年2月2日16:26 -
三 -
2
String.prototype.toTitleCase=函数(){ var i,j,str,lowers,upper; str=this.replace(/([^\W_]+[^\s-]*)*/g,函数(txt){ return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(; }); //某些次要单词应保留小写,除非 //它们是字符串中的第一个或最后一个单词 lowers=['A','An','The','And','But','Or','For','Nor','As','At', ‘By’、‘For’、’From’、‘In’、'Into’、‘Near’、‘Of’、‘On’、“Onto”、‘To’、'With’]; 对于(i=0,j=较低长度;i<j;i++) str=str.replace(新RegExp('\\s'+lowers[i]+'\\s`,'g'), 函数(txt){ return txt.toLowerCase(); }); //某些单词,如首字母缩写或首字母缩略词,应保留大写 uppers=['Id','Tv']; 对于(i=0,j=上部长度;i<j;i++) str=str.replace(新RegExp('\\b'+上标[i]+'\\b`,'g'), uppers[i].toUpperCase()); 返回str; }
“若要登录此网站并观看电视,请输入有效的id:”.toTitleCase(); //返回:“要登录此网站并观看电视,请输入有效ID:”
-
1 -
2 -
2 -
2 我看不出来,我只是采纳了另一位评论员的建议来解决连字符问题; 但您的regex似乎也做得很好,而且简单性总是更好。 对于后人和未来的读者,我只是将第三行中的regex从 /([^\W_]+[^\s-]*)*/g 到 /\b\w+/g 根据@Michael的评论; 如果您发现需要更复杂的正则表达式,请发表评论。 – 杰弗里·布斯 评论 2014年5月28日14:30 -
1
函数titleCase(str){ return str.toLowerCase().replace(/\b\w/g,s=>s.toUpperCase(()); } console.log(titleCase('iron man')); console.log(titleCase('iNcrEdible hulK'));
-
我喜欢这个解决方案; 又好又简单。 但看起来你的答案中有一点CoffeeScript( s=>s.toUpperCase() ). 我的变种是做您已经做过的事情,但扩展String对象(尽管有争议): Object.defineProperty(String.prototype,'_toPropertyCase',{value:function(){return this.toLowerCase().replace(/\b(\w)/g,function – 瓦兹 评论 2017年4月21日9:14 -
1 -
2 string=>string.toLowerCase().replace(/\b\w/g,word_head=>word_head.toUpperCase(()); 。无需对 \w个 ; 被替换的是 \b\w(黑白) 哪里 \b条 不是字符串。 评论 2022年5月27日18:13 -
1 -
1
函数标题(str){ return str.replace(/(^|\s)\s/g,函数(t){return t.toUpperCase()}); }
String.prototype.toTitle=函数(){ return this.replace(/(^|\s)\s/g,函数(t){return t.toUpperCase()}); }
String.prototype.toTitle=函数(){ return this.replace(/(^|\s)\s/g,函数(t){return t.toUpperCase()}); } console.log('all小写->','all小写'.toTitle()); console.log(“全部大写->”,“全部大写”.toTitle()); console.log(“我是小茶壶->”,“我是一个小茶壶”.toTitle());
-
6 它甚至比羔羊还要好 const titleCase=(str)=>str.replace(/\b\S/g,t=>t.toUpperCase()); 评论 2018年3月4日16:15 -
-
-
@Madbreaks该问题没有规定混合大小写输入应该转换。 然而,我更新了答案,提到 小写 请注意,这会破坏缩写词。 HTML文档 : HTML文档 与 Html文档 – 汤姆·凯 评论 2018年9月19日10:22 -
7 @Madbreaks虽然你最初的例子是人为设计的,但你很好地说明了如果投入资本化,产出将保持不变。 话虽如此,我觉得答案是肯定的(编辑建议 小写 )比假设开发人员的意图更灵活/更有用。 此方法还反映了其他语言(如PHP)类似内置方法的功能( ucwords(ucwords) )和Golang( 串。 标题 ). . 净值( 文本信息。 ToTitleCase(ToTitle大小写) )有趣的是,它适用于混合情况,但也会保持完全大写的字符串不变。 – 汤姆·凯 评论 2018年9月19日16:16
基准
TL; 博士
函数titleize(str){ let upper=真 让newStr=“” for(设i=0,l=str.length;i<l;i++){ //请注意,您还可以使用 //str[i].match(/\s/) 如果(str[i]==“”){ 上限=真 newStr+=str[i] 持续 } newStr+=上部? str[i].to上箱():str[i].to下箱() 上限=假 } 返回newStr } //注意:我想您可以使用字符码和字符串生成器来克服这个问题。
细节
str=“快跑狐狸jUMPS oR懒惰狗”; 函数正则表达式(str){ 返回str.replace( /\w\S*/g, 函数(txt){ return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(; } ); } 函数拆分(str){ 返回字符串。 拆分(“”)。 映射(w=>w[0].toUpperCase()+w.substr(1).toLowerCase(。 连接(“”); } 功能完成(str){ var i,j,str,lowers,upper; str=str.replace(/([^\W_]+[^\s-]*)*/g,函数(txt){ return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(); }); //某些次要单词应保留小写,除非 //它们是字符串中的第一个或最后一个单词 lowers=['A','An','The','And','But','Or','For','Nor','As','At', ‘By’、‘For’、’From’、‘In’、'Into’、‘Near’、‘Of’、‘On’、“Onto”、‘To’、'With’]; 对于(i=0,j=较低长度;i<j;i++) str=str.replace(新RegExp('\\s'+lowers[i]+'\\s`,'g'), 函数(txt){ return txt.toLowerCase(); }); //某些单词,如首字母缩写或首字母缩略词,应保留大写 uppers=['Id','Tv']; 对于(i=0,j=上部长度;i<j;i++) str=str.replace(新RegExp('\\b'+上标[i]+'\\b`,'g'), uppers[i].toUpperCase()); 返回str; } 函数firstLetterOnly(str){ return str.replace(/\b(\S)/g,函数(t){return t.toUpperCase();}); } 循环函数(str){ 设上限=真; 让newStr=“”; for(设i=0,l=str.length;i<l;i++){ 如果(str[i]==“”){ 上限=真; newStr+=“”; 继续; } newStr+=上部? str[i].to上箱():str[i].to下箱(); 上限=错误; } 返回newStr; }
-
1 -
1 和 str.toLowerCase().replace(/\b\S/g,函数(t){return t.toUpperCase(;}); 还赢得了regex方法并获得了相同的结果 – 衍射光变图像 评论 2022年6月28日1:14 -
-
1 -
var结果= “这很有趣”.replace(/\b[a-z]/g,(x)=>x.toUpperCase()) log(result)//这很有趣
-
-
对于任何有相同问题的人,它定义了替换部分中使用的替换“blob”。 blob按顺序编号,第一个()放入$1,第二个放入$2。 我发现这个网站很有用: javascript.info/tutorial/regular-expressions方法 – 迈克尔·布莱克本 评论 2014年12月30日21:34 -
我无法实现上述功能,但我远非正则表达式向导。 我在用 “string”.replace(/^(.)(.*)/,函数(s,p1,p2){return p1.toUpperCase()+p2;}) 同样,这只适用于大写字符串的第一个字母,但如果这正是您所需要的,我的构造也适用。 – 迈克尔·布莱克本 评论 2014年12月30日21:39 -
1 由于某种原因,FF35似乎被卡住了 “$1”.toUpperCase() ,似乎在赋值时大写尚未完成。 使用函数解决问题 “string”.replace(/^(.){1}/,函数(match){return match.toUpperCase();}) – Yellow先生 评论 2015年1月25日23:20 -
让str=“john smith” str=str.split(“”).map(([firstChar,…rest])=>firstChar.toUpperCase()+rest.join(“” 控制台.log(str)
-
我很欣赏这个解决方案,并决定这是适合我预期用途的最佳代码。 我注意到了 不考虑使用连字符 以名字命名。 这对我目前的使用没有太大影响; 然而, 我想知道如何根据这种考虑调整此代码 。再次感谢您的解决方案! – 保罗·穆雷 评论 2022年10月5日16:43 -
String.prototype.toPropertyCase=函数(){ var words=this.split(''); var结果=[]; for(var i=0;i<words.length;i++){ var letter=单词[i].charAt(0).toUpperCase(); 结果:push(字母+单词[i].slice(1)); } return results.join(“”); }; 控制台.log( “约翰·史密斯”.toPropertCase() )
/** *@param String str要转换为titleCase的文本。 *@param数组将单词粘贴为小写。 */ var titleCase=函数(str,glue){ 胶水=(胶水)? 胶水:['of'、'for'、'和']; return str.replace(/(\w)(\w*)/g,函数(_,i,r){ var j=i.到UpperCase()+(r!=空?r:“”); return(glue.indexOf(j.toLowerCase())<0)? j: j.至下壳体(); }); };
编辑
var titleCase=函数(str,glue){ 胶水=!! 胶水? 胶水:['of','for','and','a']; var first=true; return str.replace(/(\w)(\w*)/g,函数(_,i,r){ var j=i.toUpperCase()+(r!=null?r:'').toLowerCase(; var结果=((glue.indexOf(j.toLowerCase())<0)||第一个)? j:j.到LowerCase(); first=false; 返回结果; }); };
-
2 可以将字符串分解为数组。 所以我们可以使用葡萄牙语、西班牙语、意大利语和法语介词: glue='de|da|del|dos|do|das|des|la|della|delli'.split('|'); – 少年梅荷 评论 2012年6月25日23:58 -
-
@BradKoch-用空格填充,以便您使用“and”、“de”等作为搜索词,然后“and Another and Anether”将替换为“and Another and Anothers”。 评论 2015年9月4日13:19 -
-
const to TitleCase=(str)=>{ const articles=['a','an','the']; const连词=['for','and','nor','but','or','yet','so']; 常量介词=[ “with”、“at”、“from”、“into”、“on”、“of”、“to”、“in”、“for”、, “on”、“by”、“like”、“over”、“plus”、“but”、“up”、“down”、“off”、“near” ]; //可以在此处调整空间字符列表 const replaceCharsWithSpace=(str)=>str.replace(/[^0-9a-z&//\\]/gi,'').replate(/(\s\s+)/gi,''); 常量大写首字母=(str)=>str.charAt(0).toUpperCase()+str.substr(1); const normalizeStr=(str)=>str.toLowerCase().trim(); const should Capitalize=(单词,fullWordList,posWithinStr)=>{ if((posWithinStr==0)||(posWithinStr==fullWordList.length-1)){ 返回true; } 返回! (articles.includes(word)连接词.includes(word,词)介词.incrudes(词)); } str=replaceCharsWithSpace(str); str=标准化str(str); let words=str.split(“”); if(words.length<=2){//长度小于3个单词的字符串应始终首字母大写 words=words.map(w=>大写首字母(w)); } 其他{ for(设i=0;i<words.length;i++){ words[i]=(是否应大写(words[i],words,i)? 大写首字母(单词[i],单词,i):单词[i'); } } return words.join(''); }
从'chai'导入{expect}; 从'../..导入{toTitleCase}/ src/lib/stringHelper“; description('toTitleCase',()=>{ it('如果字符串长度不超过两个单词,则不考虑冠词、连词或介词,将每个单词的第一个字母大写',function(){ expect(toTitleCase('the dog')).to.equal('the dog');// 只有两个单词长时,文章大写 expect(toTitleCase('for all')).to.equal('for all');// 只有两个单词长时将连词大写 expect(toTitleCase('with cats')).to.equal('with cats');// 只有两个单词长时,介词大写 }); it('无论冠词、连词或介词如何,始终大写字符串中的第一个和最后一个单词',function(){ expect(to TitleCase(“漂亮的狗”))to.equal(“漂亮狗”); expect(toTitleCase(“对于所有致命的忍者,尽管如此”).to.equal(“对于一切致命的忍忍者,就这样吧”); expect(toTitleCase(“与猫和狗在一起我们很近”).to.equal(“与猫猫和狗一起我们很接近”); }); it('用空格替换特殊字符',function(){ expect(toTitleCase(“[狼和狮子]:小心”).to.equal(“狼和狮子要小心”); expect(to TitleCase(“狼和狮子,小心点”))to.equal(“狼与狮子,小心”); }); it('在开头和结尾处去掉空格',function(){ expect(toTitleCase(“马里奥和路易吉超级巨星传奇”).to.equal(“马里奥和路易基超级巨星系列”); }); it('冠词、连词和介词不应在3个以上单词的字符串中大写',function(){ expect(to TitleCase(《狼和狮子:两个相似动物的故事》)to。equal(《狼与狮子:两种相似动物的传说》); 期望(toTitleCase(“三名枪手及以上”)等于(“三位枪手及以下”); }); });
-
-
1 这应该是公认的答案。 你甚至写了测试! 裁判: titlecase.com网站 danielmiesler.com/blog/a不同案例类型列表 github.com/gouch/to-title-case(github.com/gouch/to-title-case) – 竞技场中的人 评论 2021年8月11日4:15 -
这是打字错误吗? 您传递了3个参数以大写FirstLetter,该参数只需要1。 我想JavaScript并不在乎,但TypeScript很适合。 – 安德鲁·本杰明 评论 2021年10月21日16:20 -
-
函数titleCase(str){ 返回str.split(“”).map(函数(val){ 返回val.charAt(0).toUpperCase()+val.substr(1).toLowerCase(; }).join(“”); }
函数到PropertCase { 返回s.toLowerCase()。替换(/\b(m)(a?c))? (\w)/g, 函数($1,$2,$3,$4,$5){if($2){return$3.toUpperCase()+$4+$5.toUpperCase();}return$1.toUpperCase();{); }
函数toTitleCase(str) { return str.replace(/\b\w/g,函数(txt){return txt.toUpperCase();}); }
-
三 是一个优雅的部分解决方案,但不适用于重音或大写字符串。 我得到了“Sofía Vergara”=>“Sofía Vergara”或“Sofía Vergara”=>“Sofía Vergara”。 第二种情况可以使用apply.toLowerCase()函数在.replace(…)之前解决。 第一种情况需要找到正确的正则表达式。 评论 2014年9月30日18:31 -
2 -
1
var words=str.split(“”);
var大写=words.map(函数(word){ return word.charAt(0).toUpperCase()+word.substring(1,word.length); });
大写。join(“”);
函数titleCase(str){ str=str.toLowerCase()// 确保HeLlo在最后变成HeLlo var words=str.split(“”); var大写=words.map(函数(word){ return word.charAt(0).toUpperCase()+word.substring(1,word.length); }); return大写。join(“”); } log(titleCase(“我是一个小茶壶”);
我有点/ 小的 茶壶
我是一个小茶壶
常量大写=str=>str.length ? str[0].toUpperCase()+ str.slice(1).to下层() : ''; 常量转义=str=>str.replace(/./g,c=>`\\${c}`); const titleCase=(句子,seps='_-/')=>{ let wordPattern=新RegExp(`[^${escape(seps)}]+`,'g'); 返回句子.replace(wordPattern,大写); }; log(titleCase(“我是一个小茶壶。”);
函数大写(str){ return str.charAt(0).toUpperCase()+str.substring(1,str.length).toLowerCase(,); } 函数titleCase(str){ return str.replace(/[^\\/\-\_]+/g,大写); } log(titleCase(“我是一个小茶壶。”);
_.startCase('foo bar'); //=>“Foo酒吧” _.startCase(“--foo-bar”); //=>“Foo酒吧” _.startCase('fooBar'); //=>“Foo酒吧” _.startCase('__FOO_BAR__'); //=>“FOO酒吧”
str.split(“”) .map(s=>s.slice(0,1).toUpperCase()+s.slice .join(“”)
str.split(“”).map(函数){ 返回s.slice(0,1).toUpperCase()+s.slice; }).join(“”)
var toMatch=“john w.smith”; var result=toMatch.replace(/(\w)(\w*)/g,函数(_,i,r){ 返回i.toUpperCase()+(r!=空?r:“”); } )
函数toTitleCase(转换){ 返回Transform.replace(/\b([a-z])/g,函数(_,initial){ return initial.toUpperCase(); }); }
函数到TitleCase(str){ return str.replace(/\S+/g,str=>str.charAt(0).toUpperCase()+str.substr(1).toLowerCase(; } log(toTitleCase(“一个名为örebro的城市”);// 一座名叫厄勒布罗的城市
“john f.kennedy”.替换(/\b\S/g,t=>t.到UpperCase())
String.prototype.toPropertyCase=函数(){ 返回this.toLowerCase().replace(/(^[a-z]|[a-z]|-[a-z')/g, 函数($1){ return$1.toUpperCase(); } ); };
var str='john smith'; 字符串到属性用例();
String.prototype.titlecase=函数(lang,withLowers=false){ var i,字符串,下,上; 字符串=this.replace(/([^\s:\-'])([^.s:\-']*)/g,函数(txt){ return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(; }).替换(/Mc(.)/g,函数(match,next){ return'Mc'+next.toUpperCase(); }); if(带下限){ if(lang=='EN'){ lowers=['A','An','The','At','By','For','In','Of','On','To','Up','And','As','But','Or','Nor','Not']; } 其他{ lowers=['Un','Une','Le','La','Les','Du','De','Des','alo','Au','Aux','Par','Pour','Dans','Sur','Et','Comme','Mais',''Ou','Ne','Ni','Pas']; } 对于(i=0;i<lowers.length;i++){ string=string.replace(新RegExp('\\s'+lowers[i]+'\\s],'g'),函数(txt){ return txt.toLowerCase(); }); } } uppers=['Id','R&d']; 对于(i=0;i<uppers.length;i++){ string=string.replace(new RegExp('\\b'+uppers[i]+'\\b','g'),uppers[i].toUpperCase()); } 返回字符串; }
函数format_str(str){ str=str.toLowerCase(); return'<span style=“text-transform:capitalie”>'+str+'</span>'; }
约翰·史密斯</span>
var str=document.getElementById('text').innerHtml; var return_text=str.toLowerCase();
#text{text-transform:大写;}
const titleCase=(str)=>{ return str.replace(/\w\S*/g,(t)=>{return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase(()}); } 导出默认titleCase;
从'导入titleCase/ utilities/titleCase.js'; const string=“我的标题&string”; console.log(titleCase(字符串));//->' 我的标题和字符串'
函数到TitleCase(str){ return str.toLocaleLowerCase().replace( /(^|u |ü|ö|sh | Jo |ç| I |Ø|Ö| \w)\S*/g, (txt)=>txt.charAt(0).toLocaleUpperCase()+txt.substring(1), ) } console.log(到TitleCase(“ISMA I L HAKKI”)) console.log(到TitleCase('R AHMARAN B I NB I R GECE MASALLARI')) console.log(到TitleCase(“EKNOLOJ IüRüNü”)
-
-
-
-
“使用语言环境操作对非英语语言很重要”,但您的解决方案忽略了语言环境操作。 您认为需要操作的字符位于char(0)是不正确的。 例如,您需要一个测试用例来检查“oifig na bpasanna”的正确转换是否为“oifig na bpasanna”-“oifig-na bpasanna”甚至不接近正确。 您也不能对单个字符执行LocaleUpperCase; 它就是不起作用。例如,OIFIG NA bPASANNA(注意“b”)都是大写的: commons.wikimedia.org/wiki/File:ALLCAPS_OIFIG_NA_bPASANNA。 JPG格式 – 詹姆斯·摩尔 评论 2022年8月10日20:56 -