Ich habe eine Schnur "MySites"
. Ich möchte ein Leerzeichen zwischen My
und setzen Sites
.
Wie kann ich das in jQuery oder JavaScript machen?
Ich habe eine Schnur "MySites"
. Ich möchte ein Leerzeichen zwischen My
und setzen Sites
.
Wie kann ich das in jQuery oder JavaScript machen?
Antworten:
Sie können einfach vor jedem Großbuchstaben ein Leerzeichen einfügen und die führenden und nachfolgenden Leerzeichen abschneiden
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. Das + stellt sicher, dass Sie so viele aufeinanderfolgende Großbuchstaben wie möglich finden.
Dadurch wird jedes Vorkommen eines Kleinbuchstaben gefolgt von einem Großbuchstaben gefunden und ein Leerzeichen dazwischen eingefügt:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
In besonderen Fällen, in denen 2 aufeinanderfolgende Großbuchstaben auftreten (z. B. ThisIsATest), fügen Sie unten zusätzlichen Code hinzu:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Darf ich eine geringfügige Änderung der aktuell akzeptierten Antwort vorschlagen:
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;
}
Dies bedeutet, dass:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Was möglicherweise etwas nützlicher ist, wenn Sie sich mit DB-Spaltennamen befassen (und für einige Dinge Akronyme verwenden).
Dies sollte ein Leerzeichen zwischen jedem Großbuchstaben einfügen, dem kein Großbuchstabe vorangestellt wurde.
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
wird den Wert haben, den Sie wollen. Wenn Sie Ihren Code mit Regex kürzen möchten, können Sie den folgenden Code von Javascript camelCase bis Regular Form verwenden
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
Regex, um die Grenze zwischen Kleinbuchstaben und Großbuchstaben zu finden, und fügen Sie dann ein Leerzeichen ein
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Folgendes habe ich letztendlich verwendet, um eine Zeichenfolge in einen Titel zu konvertieren, basierend auf einigen der Antworten hier:
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')
Hier ist eine JSFiddle, in der Sie Ihre Zeichenfolge testen können, um festzustellen, ob diese Ihren Anforderungen entspricht: https://jsfiddle.net/thomastasa/5236dv8t/85/
Beispiele:
Sie können String#split()
das großgeschriebene Alphabet ( [A-Z]
) und dann Array#join()
das Array mit einem Leerzeichen verwenden und vorausschauen:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Oder als String-Objekt-Funktion:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
Ersetzen Sie in einem einzelnen regulären Ausdruck (ohne Verzierungen oder Verknüpfungen) jedes Zeichen, nicht nur Buchstaben [a-z]
oder [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Hier können Sie mehr über den Blick dahinter (?<!^)
erfahren .