สตริง Javascript Split บนอักขระ UpperCase


107

คุณแยกสตริงออกเป็นอาร์เรย์ใน Javascript ด้วยอักขระ UpperCase ได้อย่างไร

ดังนั้นฉันต้องการแยก:

'ThisIsTheStringToSplit'

เป็น

('This', 'Is', 'The', 'String', 'To', 'Split')

สิ่งนี้อาจเป็นประโยชน์สำหรับบางคนที่กำลังมองหาวิธีแก้ปัญหานี้: stackoverflow.com/a/25732260/1454888
Augusto Barreto

คำตอบ:


228

ฉันจะทำ.match()เช่นนี้:

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+/g);

มันจะสร้างอาร์เรย์ดังนี้:

['This', 'Is', 'The', 'String', 'To', 'Split']

แก้ไข:เนื่องจากstring.split()วิธีนี้ยังรองรับ regex จึงสามารถทำได้เช่นนี้

'ThisIsTheStringToSplit'.split(/(?=[A-Z])/); // positive lookahead to keep the capital letters

ที่จะแก้ปัญหาจากความคิดเห็น:

"thisIsATrickyOne".split(/(?=[A-Z])/);

47
จะไม่พบอักขระตัวพิมพ์ใหญ่เดี่ยว ฉันขอแนะนำสิ่งต่อไปนี้: "thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1)
andrewmu

18
.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

สิ่งนี้ควรจัดการกับตัวเลขเช่นกัน .. การรวมในตอนท้ายส่งผลให้เกิดการต่อรายการอาร์เรย์ทั้งหมดเข้ากับประโยคหากนั่นคือสิ่งที่คุณกำลังมองหา

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

เอาต์พุต

"This Is The String To Split"

เหมาะมากครับ แต่ใครก็ตามที่ใช้สิ่งนี้ควรระวังในกรณีต่อไปนี้: 'ThisIs8TheSt3ringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")will output This Is 8 The St 3 To Split, ommitting the small case string ( ring) after 3.
Diablo

9

อยู่นี่ไง :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}

1

นี่คือวิธีแก้ปัญหาของฉันซึ่งรวดเร็วข้ามแพลตฟอร์มไม่ขึ้นกับการเข้ารหัสและสามารถเขียนในภาษาใดก็ได้โดยไม่ต้องพึ่งพา

var s1 = "ThisЭтотΨόυτÜimunəՕրինակPříkladדוגמאΠαράδειγμαÉlda";
s2 = s1.toLowerCase();
result="";
for(i=0; i<s1.length; i++)
{
 if(s1[i]!==s2[i]) result = result +' ' +s1[i];
 else result = result + s2[i];
}
result.split(' ');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.