Saya memiliki tali "MySites"
. Saya ingin memberi spasi antara My
dan Sites
.
Bagaimana saya bisa melakukan ini di jQuery atau JavaScript?
Saya memiliki tali "MySites"
. Saya ingin memberi spasi antara My
dan Sites
.
Bagaimana saya bisa melakukan ini di jQuery atau JavaScript?
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()
/([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');
"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:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Yang mungkin sedikit lebih berguna jika Anda berurusan dengan nama kolom db (Dan menggunakan akronim untuk beberapa hal)
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(); })
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") );
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:
Anda bisa menggunakan String#split()
dan melihat ke depan untuk alfabet yang dikapitalisasi ( [A-Z]
) dan kemudian Array#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());
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 .