web-dev-qa-db-ja.com

大文字の前にスペースを挿入

文字列"MySites"があります。 MySitesの間にスペースを置きたい。

JQueryまたはJavaScriptでこれを行うにはどうすればよいですか?

82
CLiown

すべての大文字の前にスペースを追加し、先頭と末尾のスペースを切り取ることができます

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

これにより、小文字の後に出現する大文字が検出され、それらの間にスペースが挿入されます。

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

2つの連続した大文字が発生する特別な場合(例:ThisIsATest)は、以下の追加コードを追加します。

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

現在受け入れられている答えを少し編集することをお勧めします。

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

この意味は:

ACROText -> ACRO Text
UserNameTest -> User Name Test

Dbカラム名を扱う場合(そしていくつかのことを頭字語を使用している場合)

17
JosephGarrone

これにより、大文字が先行していない各大文字の間にスペースが挿入されます。

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には、必要な値が設定されます。また、正規表現を使用してコードを短縮する場合は、次のコードを使用できます Javascript camelCase to Regular Form

"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })
6
Devin Burke

小文字を見つけるための正規表現-大文字の境界はスペースを挿入します

<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );

http://jsfiddle.net/uXy64/

5
Adam Straughan

String#split()と大文字のアルファベットの先読み(_[A-Z]_)を使用してから、スペースを含む配列Array#join()を使用できます。

_let stringCamelCase = "MySites";

let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");

console.log(string)_

または、String Object関数として:

_String.prototype.cC2SC = function() {
  return this.split(/(?=[A-Z])/).join(" ");
}

console.log("MyCamelCase".cC2SC());_
1
Luca Kiebel

[a-z]または[A-Z]だけでなく、任意の文字を許可する単一の正規表現置換(トリムまたは結合なし)。

const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"

(?<!^)here の背後にある外観の詳細を確認できます。

0
Jose Da Silva