javascript - Infoga mellanslag före versaler


Jag har en sträng "MySites". Jag vill sätta ett mellanrum mellan My och Sites.

Hur kan jag göra detta i jQuery eller JavaScript?

Svar #1

Du kan bara lägga till ett mellanslag före varje versal och ta bort ledande och avslutande mellanslag

s = s.replace(/([A-Z])/g, ' $1').trim()

Svar #2

Detta kommer att hitta varje förekomst av en gemen tecken följt av en versal tecken, och infoga ett mellanslag mellan dem:

s = s.replace(/([a-z])([A-Z])/g, '$1 $2');

För speciella fall när 2 på varandra följande versaler förekommer (t.ex.: ThisIsATest) lägg till ytterligare kod nedan:

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');

Svar #3

Kan jag föreslå en liten ändring av det för närvarande accepterade svaret:

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;
}

Detta betyder att:

ACROText -> ACRO Text
UserNameTest -> User Name Test

Vilket kan vara något mer användbart om du har att göra med databas kolumnnamn (och använder förkortningar för vissa saker)

Svar #4

Här är vad jag slutade använda för att konvertera en sträng till versalisering av titlar, baserat på några av svaren här:

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')   

Här är en JSFiddle där du kan testa din sträng för att se om detta uppfyller dina behov: https://jsfiddle.net/thomastasa/5236dv8t/85/

Exempel:

  • "yourStringHere" -> "Din Sträng Här"
  • "AnotherStringHere" -> "Another String Here"
  • "someones_string" -> "Someones String"
  • "Another-String-Here" -> "Another String Here"
  • "myAWESOMEString" -> "Min FANTASTISKA Sträng"

Relaterade artiklar