Bisakah Anda memberikan lebih banyak detail? Apa bentuk umum string yang ingin Anda pisahkan? Jika hanya satu string itu, mengapa tidak meletakkan spasi secara manual?
Pointy
2
Lebih tepatnya, saya rasa tidak ada yang bisa mengerti apa yang Anda tanyakan
Clement Herreman
1
tentukan pola yang harus cocok, misalnya "spasi ketika menemukan 'Saya' dalam string" atau "tambahkan spasi sebelum setiap karakter kapital, kecuali itu adalah karakter pertama", atau ....
JohnSmith
"antara MySites". Bagaimana Anda bisa menempatkan spasi di antara 1 benda? Saya berasumsi Anda menginginkan "Situs Saya" sebagai keluaran.
Roket Hazmat
#meagar - komentar bagus (sarkasme). tidakkah Anda pernah diajarkan bahwa jika Anda tidak memiliki sesuatu yang baik untuk dikatakan, jangan katakan apa-apa?
carinlynchin
Jawaban:
173
Anda bisa menambahkan spasi sebelum setiap karakter huruf besar dan memotong spasi di depan dan di belakangnya
Ini juga berfungsi untuk "1AndAbove". Solusi lainnya tidak. Terima kasih!!
One-One
1
Ini "gagal" untuk akronim, bagaimana kita bisa mencegahnya untuk bertindak ketika 2 atau lebih huruf besar berturut-turut?
Toni Michel Caubet
4
@ToniMichelCaubet mudah, memodifikasi regex seperti ini: /([A-Z]+)/g. Tanda + akan memastikan Anda mencocokkan sebanyak mungkin huruf kapital yang berurutan.
iFreilicht
Mengapa tanda kurung yang Anda gunakan untuk mengapit '[AZ]' diperlukan dalam kode ini?
Kristina Bressler
1
@KinaKurung mengatakan 'Saya adalah variabel'. Tanpa tanda kurung, itu menghasilkan jawaban '$ 1y $ 1ites' untuk 'MySites'
pengguna2051552
128
Ini akan menemukan setiap kemunculan karakter huruf kecil diikuti dengan karakter huruf besar, dan menyisipkan spasi di antaranya:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Untuk kasus khusus ketika 2 huruf kapital berturut-turut terjadi (Misalnya: ThisIsATest) tambahkan kode tambahan di bawah ini:
Sekadar peringatan, ini gagal karena satu huruf "ThisIsATest" akan menghasilkan "This Is ATest".
Ceres
3
@ Ceres: Poin bagus. Kasus itu dapat ditangani dengan menyisipkan spasi sebelum huruf besar apa pun yang bukan karakter pertama, tetapi Anda masih memiliki kasus yang tidak dapat ditangani tanpa pengenalan kata, seperti "RunThisSQLQuery".
Guffa
1
untuk "ThisIsATest" - (tidak termasuk 'RunThisSQLQuery') Anda dapat melakukan ini: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
Cemerlang! Terima kasih!
Ami Schreiber
22
Bolehkah saya menyarankan sedikit pengeditan pada jawaban yang diterima saat ini:
Ini bekerja dengan sempurna untuk apa yang saya butuhkan. Itu dengan sempurna menambahkan spasi di antara huruf kapital tetapi tetap menyatukan akronim.
mighty_mite
6
Ini harus menyisipkan spasi di antara setiap huruf kapital yang tidak diawali dengan huruf kapital.
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];
}
newStringakan mendapatkan nilai yang Anda inginkan. Juga, jika Anda ingin mempersingkat kode Anda menggunakan regex, Anda dapat menggunakan kode berikut dari Javascript camelCase ke Regular Form
"thisStringIsGood"// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
Jawaban:
Anda bisa menambahkan spasi sebelum setiap karakter huruf besar dan memotong spasi di depan dan di belakangnya
s = s.replace(/([A-Z])/g, ' $1').trim()
sumber
/([A-Z]+)/g
. Tanda + akan memastikan Anda mencocokkan sebanyak mungkin huruf kapital yang berurutan.Ini akan menemukan setiap kemunculan karakter huruf kecil diikuti dengan karakter huruf besar, dan menyisipkan spasi di antaranya:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Untuk kasus khusus ketika 2 huruf kapital berturut-turut terjadi (Misalnya: ThisIsATest) tambahkan kode tambahan di bawah ini:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
sumber
"RunThisSQLQuery"
.Bolehkah saya menyarankan sedikit pengeditan pada jawaban yang diterima saat ini:
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; }
Artinya:
Yang mungkin sedikit lebih berguna jika Anda berurusan dengan nama kolom db (Dan menggunakan akronim untuk beberapa hal)
sumber
Ini harus menyisipkan spasi di antara setiap huruf kapital yang tidak diawali dengan huruf kapital.
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
akan mendapatkan nilai yang Anda inginkan. Juga, jika Anda ingin mempersingkat kode Anda menggunakan regex, Anda dapat menggunakan kode berikut dari Javascript camelCase ke Regular Form"thisStringIsGood" // insert a space before all caps .replace(/([A-Z])/g, ' $1') // uppercase the first character .replace(/^./, function(str){ return str.toUpperCase(); })
sumber
regex untuk mencari huruf kecil - batas huruf besar lalu masukkan spasi
<div id='x'>ThisIsMySites</div> $('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
http://jsfiddle.net/uXy64/
sumber
Inilah yang akhirnya saya gunakan untuk mengonversi string menjadi kasus judul, berdasarkan beberapa jawaban di sini:
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')
Berikut adalah JSFiddle tempat Anda dapat menguji string Anda untuk melihat apakah ini memenuhi kebutuhan Anda: https://jsfiddle.net/thomastasa/5236dv8t/85/
Contoh:
sumber
Anda bisa menggunakan
String#split()
dan melihat ke depan untuk alfabet yang dikapitalisasi ([A-Z]
) dan kemudianArray#join()
array dengan spasi:let stringCamelCase = "MySites"; let string = stringCamelCase.split(/(?=[A-Z])/).join(" "); console.log(string)
Atau, sebagai fungsi Objek String:
String.prototype.cC2SC = function() { return this.split(/(?=[A-Z])/).join(" "); } console.log("MyCamelCase".cC2SC());
sumber
Dalam satu regex, ganti (tanpa trim atau gabungan) yang memungkinkan karakter apa pun tidak hanya huruf
[a-z]
atau[A-Z]
.const str = "MySites"; str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Anda dapat memeriksa lebih lanjut tentang tampilan belakang di
(?<!^)
sini .sumber