Bir ipim var "MySites"
. Ben arasına boşluk yerleştirmek istediğiniz My
ve Sites
.
Bunu jQuery veya JavaScript'te nasıl yapabilirim?
Bir ipim var "MySites"
. Ben arasına boşluk yerleştirmek istediğiniz My
ve Sites
.
Bunu jQuery veya JavaScript'te nasıl yapabilirim?
Yanıtlar:
Her büyük harften önce bir boşluk ekleyebilir ve baştaki ve sondaki boşlukları kırpabilirsiniz.
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. +, Mümkün olduğunca çok sayıda ardışık büyük harfle eşleşmenizi sağlar.
Bu, her bir küçük harfli karakteri ve ardından bir büyük harf karakterini bulur ve aralarına bir boşluk ekler:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Ardışık 2 büyük harfin olduğu özel durumlar için (Örn: ThisIsATest) aşağıya ek kod ekleyin:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Şu anda kabul edilen cevaba ufak bir değişiklik önerebilir miyim:
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;
}
Bu şu demek:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Eğer db sütun isimleriyle uğraşıyorsanız biraz daha kullanışlı olabilir (ve bazı şeyler için kısaltmalar kullanıyorsanız)
Bu, her büyük harf arasına bir büyük harf gelmeyen bir boşluk eklemelidir.
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
istediğiniz değere sahip olacak. Ayrıca, regex kullanarak kodunuzu kısaltmak istiyorsanız, aşağıdaki kodu Javascript camelCase'den Normal Form'a kullanabilirsiniz.
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
küçük harf bulmak için regex - büyük harf sınırı sonra boşluk ekleyin
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
İşte buradaki cevaplardan birkaçına dayanarak bir dizeyi başlık durumuna dönüştürmek için kullandığım şey:
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')
İhtiyaçlarınızı karşılayıp karşılamadığını görmek için dizenizi test edebileceğiniz bir JSFiddle: https://jsfiddle.net/thomastasa/5236dv8t/85/
Örnekler:
Büyük String#split()
harfli alfabe ( [A-Z]
) ve ardından Array#join()
boşluk içeren dizi için ve ileriye bakabilirsiniz :
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Veya bir Dize Nesnesi işlevi olarak:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
Tek bir regex herhangi bir karakter değil, sadece harfler izin verdiğini (düzeltir olmadan veya birleşimler) değiştirin [a-z]
ya [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
(?<!^)
Buradaki bakış hakkında daha fazla bilgi edinebilirsiniz .