Ich habe eine Schnur "MySites". Ich möchte ein Leerzeichen zwischen Myund setzen Sites.
Wie kann ich das in jQuery oder JavaScript machen?
Ich habe eine Schnur "MySites". Ich möchte ein Leerzeichen zwischen Myund 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];
}
newStringwird 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 .