Mam sznurek "MySites"
. Chcę wstawić spację między My
a Sites
.
Jak mogę to zrobić w jQuery lub JavaScript?
Mam sznurek "MySites"
. Chcę wstawić spację między My
a Sites
.
Jak mogę to zrobić w jQuery lub JavaScript?
Odpowiedzi:
Możesz po prostu dodać spację przed każdą wielką literą i odciąć spacje wiodące i końcowe
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. Znak + sprawi, że dopasujesz jak najwięcej kolejnych wielkich liter.
Spowoduje to znalezienie każdego wystąpienia małej litery, po której następuje duża litera, i wstawienie spacji między nimi:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
W szczególnych przypadkach, gdy występują 2 kolejne wielkie litery (np. ThisIsATest), dodaj dodatkowy kod poniżej:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Czy mogę zasugerować niewielką zmianę obecnie zaakceptowanej odpowiedzi:
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;
}
To znaczy że:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Co może być nieco bardziej przydatne, jeśli masz do czynienia z nazwami kolumn db (i używasz akronimów do niektórych rzeczy)
Powinno to spowodować wstawienie spacji między każdą wielką literą, która nie była poprzedzona dużą literą.
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
będzie miał wartość, którą chcesz. Ponadto, jeśli chcesz skrócić swój kod za pomocą wyrażenia regularnego, możesz użyć następującego kodu z Javascript camelCase do 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, aby znaleźć małą literę - górną granicę, a następnie wstaw spację
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Oto, czego ostatecznie użyłem, aby przekonwertować ciąg na przypadek tytułu, na podstawie kilku odpowiedzi tutaj:
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')
Oto JSFiddle, w którym możesz przetestować swój ciąg, aby sprawdzić, czy spełnia on Twoje potrzeby: https://jsfiddle.net/thomastasa/5236dv8t/85/
Przykłady:
Możesz użyć String#split()
i wyprzedzenia dla alfabetu pisanego wielkimi literami ( [A-Z]
), a następnie Array#join()
tablicy ze spacją:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Lub jako funkcja obiektu typu String:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
W pojedynczej zamianie wyrażenia regularnego (bez przycinania i łączenia), która dopuszcza dowolny znak, a nie tylko litery [a-z]
lub [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Więcej informacji na temat wyglądu z tyłu można znaleźć (?<!^)
tutaj .