文字列を分割したいのですが、次のような空白を保持したいです:
var str = "my car is red";
var stringArray [];
stringArray [0] = "my";
stringArray [1] = " ";
stringArray [2] = "car";
stringArray [3] = " ";
stringArray [4] = "is";
stringArray [5] = " ";
stringArray [6] = "red";
それを行うにはどうすればいいですか?
ありがとう!
文字列を空白で分割してから追加し直すことができます。これは、各エントリの間にあることがわかっているためです。
var string = "text to split";
string = string.split(" ");
var stringArray = new Array();
for(var i =0; i < string.length; i++){
stringArray.Push(string[i]);
if(i != string.length-1){
stringArray.Push(" ");
}
}
更新:末尾のスペースを削除しました。
正規表現を使用する:
var str = "my car is red";
var stringArray = str.split(/(\s+)/);
console.log(stringArray); // ["my", " ", "car", " ", "is", " ", "red"]
\s
は空白である任意の文字に一致し、プラスを追加すると貪欲になり、文字で始まり空白で終わるグループに一致し、次のグループは空白の後に文字がある場合などに開始します。
Python langのような文字列をスペースで分割するには、次を使用できます。
var w = "hello my brothers ;";
w.split(/(\s+)/).filter( function(e) { return e.trim().length > 0; } );
出力:
["hello", "my", "brothers", ";"]
または類似:
w.split(/(\s+)/).filter( e => e.trim().length > 0)
(出力する)
\b
を使用して、Wordの境界で分割できます。 MDN を参照してください
「\ b:文字とスペースの間など、幅がゼロのワード境界に一致します。」
また、その後に空白\s
が続くことを確認する必要があります。 "My car isn't red"
のような文字列が引き続き機能するように:
var stringArray = str.split(/\b(\s)/);
複数のスペースを考慮するには、最初の\b
が必要です。 my car is red
編集:グループ化を追加
str.split(' ').join('§ §').split('§');
これはすべてのブラウザでサポートされているわけではありませんが、正規表現内でキャプチャ括弧を使用すると、キャプチャされた入力が結果に結合されます。
Separatorがキャプチャー括弧を含む正規表現である場合、セパレーターが一致するたびに、キャプチャー括弧の結果(未定義の結果を含む)が出力配列にスプライスされます。 [ 参照 )
そう:
var stringArray = str.split(/(\s+)/);
^ ^
//
出力:
["my", " ", "car", " ", "is", " ", "red"]
これにより、元の入力の連続したスペースが折りたたまれますが、それ以外の落とし穴は考えられません。