"MySites"
ฉันมีสตริง ฉันต้องการที่จะวางช่องว่างระหว่างและMy
Sites
ฉันจะทำสิ่งนี้ใน jQuery หรือ JavaScript ได้อย่างไร
"MySites"
ฉันมีสตริง ฉันต้องการที่จะวางช่องว่างระหว่างและMy
Sites
ฉันจะทำสิ่งนี้ใน jQuery หรือ JavaScript ได้อย่างไร
คำตอบ:
คุณสามารถเพิ่มช่องว่างก่อนอักขระตัวพิมพ์ใหญ่ทุกตัวและตัดช่องว่างนำหน้าและต่อท้าย
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. เครื่องหมาย + จะทำให้แน่ใจว่าคุณจับคู่ตัวพิมพ์ใหญ่ติดต่อกันให้มากที่สุด
ซึ่งจะพบการเกิดขึ้นของอักขระตัวพิมพ์เล็กแต่ละตัวตามด้วยอักขระตัวพิมพ์เล็กและแทรกช่องว่าง
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
สำหรับกรณีพิเศษเมื่อเกิดอักษรตัวพิมพ์ใหญ่ 2 ตัวติดกัน (เช่น ThisIsATest) ให้เพิ่มรหัสด้านล่าง:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
แต่คุณยังมีกรณีที่ไม่สามารถจัดการได้โดยไม่ต้องจดจำคำเช่น
ฉันขอแนะนำให้แก้ไขเล็กน้อยสำหรับคำตอบที่ยอมรับในปัจจุบัน:
function insertSpaces(string) {
string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
return string;
}
ซึ่งหมายความว่า:
ACROText -> ACRO Text
UserNameTest -> User Name Test
ซึ่งอาจมีประโยชน์มากกว่าเล็กน้อยหากคุณกำลังจัดการกับชื่อคอลัมน์ db (และกำลังใช้คำย่อสำหรับบางสิ่ง)
สิ่งนี้ควรแทรกช่องว่างระหว่างอักษรตัวใหญ่แต่ละตัวที่ไม่ได้นำหน้าด้วยอักษรตัวใหญ่
var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
if (!wasUpper && myString[i] == myString.toUpperCase()[i])
{
newString = newString + " ";
wasUpper = true;
}
else
{
wasUpper = false;
}
newString = newString + myString[i];
}
newString
จะมีค่าที่คุณต้องการ นอกจากนี้หากคุณต้องการย่อโค้ดโดยใช้ regex คุณสามารถใช้โค้ดต่อไปนี้จากJavascript camelCase เป็น Regular Form
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
regex เพื่อค้นหาตัวพิมพ์เล็ก - ขอบเขตตัวพิมพ์ใหญ่จากนั้นแทรกช่องว่าง
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
นี่คือสิ่งที่ฉันใช้ในการแปลงสตริงเป็นตัวพิมพ์ใหญ่ตามคำตอบบางส่วนที่นี่:
str = str
.replace(/(_|-)/g, ' ')
.trim()
.replace(/\w\S*/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1)
})
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
นี่คือ JSFiddle ที่คุณสามารถทดสอบสตริงของคุณเพื่อดูว่าตรงกับความต้องการของคุณหรือไม่: https://jsfiddle.net/thomastasa/5236dv8t/85/
ตัวอย่าง:
คุณสามารถใช้String#split()
และมองไปข้างหน้าสำหรับตัวอักษรตัวใหญ่ ( [A-Z]
) จากนั้นArray#join()
อาร์เรย์ที่มีช่องว่าง:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
หรือเป็นฟังก์ชัน String Object:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());