วิธีที่ดีที่สุดในการใช้ประโยชน์จากคำในสตริงคืออะไร?
วิธีที่ดีที่สุดในการใช้ประโยชน์จากคำในสตริงคืออะไร?
คำตอบ:
/**
* 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"
add-on 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'
โดยทั่วไปแล้ว regex จะตรงกับตัวอักษรตัวแรกของแต่ละคำภายในสตริงที่กำหนดและแปลงเฉพาะตัวอักษรนั้นเป็นตัวพิมพ์ใหญ่:
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
regex นี้ตรงกับตัวอักษรตัวแรกและตัวอักษรที่ไม่ใช่ช่องว่างนำหน้าด้วยช่องว่างภายในสตริงที่กำหนดและแปลงเฉพาะตัวอักษรนั้นเป็นตัวพิมพ์ใหญ่:
กลุ่มที่ไม่มีการจับภาพสามารถใช้ที่นี่ได้ดังต่อไปนี้/(?:^|\s)\S/g
แม้ว่าการg
ตั้งค่าสถานะภายใน regex ของเราจะไม่จับภาพกลุ่มย่อยโดยการออกแบบต่อไป
ไชโย!
päijät-häme
กลายเป็นPäIjäT-HäMe
EisbäRen
เป็นหนึ่งผลลัพธ์ตัวอย่างเช่น
Päijät-Häme
แต่อย่างน้อยใน Chrome whitespace จะไม่รวมเครื่องหมายขีด (-) ดังนั้นส่วนที่สองของชื่อจะไม่ได้เป็นตัวพิมพ์ใหญ่ /(^|\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 แทน
John Resig (จากชื่อเสียงของ jQuery) ส่งสคริปต์ perl ที่เขียนโดย John Gruber ไปยัง JavaScript สคริปต์นี้ใช้ประโยชน์ในวิธีที่ชาญฉลาดยิ่งขึ้น แต่ไม่ได้ใช้อักษรตัวพิมพ์เล็กเช่น 'ของ' และ 'และ'
คุณสามารถค้นหาได้ที่นี่: ชื่อเรื่องตัวพิมพ์ใหญ่ใน 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()
และมันจะพิมพ์ใหญ่ทุกตัวอักษรตัวที่ 1 ของแต่ละคำ
ที่มา: 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
ยังล้มเหลวสำหรับตัวอักษรที่ไม่ใช่ภาษาอังกฤษ ไม่ใช่ทุกคนที่เกี่ยวข้องกับอักขระยูนิโค้ดและสิ่งนี้จะช่วยผู้ที่ไม่ต้องการ
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)
นี่เป็นตัวพิมพ์ใหญ่ตัวอักษรตัวแรกเท่านั้นและจะไม่ส่งผลกระทบต่อส่วนที่เหลือของประโยค
ทางออกของฉัน:
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
สิ่งนี้ควรครอบคลุมกรณีการใช้งานพื้นฐานส่วนใหญ่
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
...
วิธีการแก้ปัญหานี้ไม่ได้ใช้ regex รองรับตัวอักษรเน้นเสียงและรองรับเกือบทุกเบราว์เซอร์
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 ('çao 2nd ภายในโปรแกรม Javascript'));
เอาท์พุท:
โปรแกรมจาวาสคริปต์ภายใน 2ndao 2nd
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 เพื่อให้ง่ายขึ้นซ้ำแล้วใช้ฟังก์ชั่นแผนที่เปลี่ยนแต่ละคำตามที่คุณต้องการ
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 (การแปลงข้อความ: พิมพ์ใหญ่;) ไม่ได้ใช้ประโยชน์จากข้อมูลของสตริงอย่างแท้จริง แต่แสดงการแสดงผลที่เป็นตัวพิมพ์ใหญ่บนหน้าจอ
หากคุณกำลังมองหาวิธีที่ถูกต้องมากขึ้นในการบรรลุเป้าหมายในระดับข้อมูลโดยใช้ 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);
}
}
ใช้สิ่งนี้:
String.prototype.toTitleCase = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
<p id = "demo"></p>
</div>
คุณสามารถใช้คำต่อไปนี้เพื่อพิมพ์คำให้เป็นตัวพิมพ์ใหญ่ในสตริง:
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();
});
};
ฉันจะใช้ regex เพื่อจุดประสงค์นี้:
myString = ' this Is my sTring. ';
myString.trim().toLowerCase().replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));
text-transform:capitalize;
.