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


96

ひもあります"MySites"。私は間にスペースを配置したいMySites

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


1
詳細を教えてください。分離する文字列の一般的な形式は何ですか?それが1つの文字列だけの場合は、手動でスペースを入れてみませんか?
先のとがった

2
もっと正確に言ってください。あなたが何を求めているのか誰にも理解できないと思います
クレメントエレマン

1
一致するパターンを定義します。たとえば、「文字列に「My」が見つかった場合のスペース」または「最初の文字でない限り、各大文字の前にスペースを追加します」、または...
JohnSmith

「間マイサイト」。1つのモノの間にスペースをどのように配置できますか?出力として「マイサイト」が必要だと思います。
ロケットハズマット

#meagar-いいコメント(皮肉)。言いたいことが何もないなら、何も言わないでくださいと教えたことはありませんか?
カリンリンチン

回答:


167

すべての大文字の前にスペースを追加して、先頭と末尾のスペースを削除できます

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

これは「1AndAbove」でも機能します。他の解決策はしません。ありがとう!!
desaivv

1
頭字語では「失敗」しますが、2つ以上の連続した大文字の場合、それが機能しないようにするにはどうすればよいですか?
Toni Michel Caubet 16

4
@ToniMichelCaubetは簡単で、次のように正規表現を変更します/([A-Z]+)/g。+は、できるだけ多くの連続した大文字と一致することを確認します。
iFreilicht 2017年

このコードで '[AZ]'を囲むために使用する括弧が必要なのはなぜですか?
クリスティーナブレスラー2017

1
@クリスティーナ括弧は「私は変数です」と言います。括弧がないと、「MySites」に対して「$ 1y $ 1ites」という答えが返されます
user2051552

128

これは、大文字が後に続く小文字の出現を見つけ、それらの間にスペースを挿入します:

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

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

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

3
ただの警告ですが、これは「ThisIsATest」という1文字が失敗すると「This Is ATest」になります。
セレス14

3
@セレス:良い点。そのような場合は、最初の文字ではない大文字の前にスペースを挿入することで対応できますが、などの単語認識なしでは対応できない場合もあります"RunThisSQLQuery"
グッファ

1
"ThisIsATest"-( 'RunThisSQLQuery'をカウントしない)の場合、次のように実行できます:str.replace(/([AZ])/ g、 '$ 1')。trim()
carinlynchin

鮮やかさ!ありがとう!
アミシュライバー

21

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

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列名を処理している場合(そしていくつかのことで頭字語を使用している場合)は、どちらかというと少し便利かもしれません。


1
これは、私が必要としていたものに対して完全に機能します。それは完全に大文字の間にスペースを追加しましたが、頭字語をまとめました。
mighty_mite 2016

6

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

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から通常のフォームに次のコードを使用できます。

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


2

ここにいくつかの答えに基づいて、文字列をタイトルケースに変換するために使用したものがあります:

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

これがJSFiddleで、文字列をテストして、これがニーズを満たしているかどうかを確認できます。https://jsfiddle.net/thomastasa/5236dv8t/85/


例:

  • 「yourStringHere」->「Your StringHere」
  • "AnotherStringHere"-> "ここに別の文字列"
  • "someones_string"-> "Someones String"
  • "ここに別の文字列"-> "ここに別の文字列"
  • "myAWESOMEString"-> "My AWESOME String"

1

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

let stringCamelCase = "MySites";

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

console.log(string)

または、文字列オブジェクト関数として:

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

console.log("MyCamelCase".cC2SC());


1

単一の正規表現置換(トリムまたは結合なし)で、文字[a-z]または[A-Z]

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

あなたは(?<!^) ここで裏側についてもっとチェックすることができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.