web-dev-qa-db-ja.com

JavaScriptスプリットスペース区切りの文字列と余分なコンマとスペースのトリミング

キーワード文字列を分割して、コンマ区切りの文字列に変換する必要があります。ただし、ユーザーが既に入力した余分なスペースやコンマを取り除く必要があります。

var keywordString = "ford    tempo, with,,, sunroof";

この文字列への出力:

ford,tempo,with,sunroof,

最終出力に末尾のコンマが必要で、スペースは不要です。

Regexと文字列分割関数のどちらを使用すればよいかわからない。

誰かがすでにこのようなことをしていますか?

JavaScript(またはJQ)を使用する必要があります。

編集(実用的なソリューション):

var keywordString = ", ,, ford,    tempo, with,,, sunroof,, ,";

//remove all commas; remove preceeding and trailing spaces; replace spaces with comma

str1 = keywordString.replace(/,/g , '').replace(/^\s\s*/, '').replace(/\s\s*$/, '').replace(/[\s,]+/g, ',');


//add a comma at the end
str1 = str1 + ',';

console.log(str1);
13
User970008

どちらの場合も正規表現が必要です。あなたは文字列を分割して結合することができます:

str = str.split(/[\s,]+/).join();

これにより、連続する空白とコンマが分割されて消費されます。同様に、これらの文字を一致させて置き換えることができます。

str = str.replace(/[\s,]+/g, ',');

末尾のコンマは、1つ追加するだけです

str = .... + ',';

前後に空白がある場合は、最初にそれらを削除する必要があります。

参照:.split.replace正規表現

33
Felix Kling

Felix Kling に加えて answer

前後に空白がある場合は、最初にそれらを削除する必要があります。

プロトタイプにフックすることにより、「拡張メソッド」をJavaScript Stringに追加することが可能です。以下を使用して前後の空白を削除してきましたが、これまでのところうまくいきました:

// trims the leading and proceeding white-space
String.prototype.trim = function()
{
    return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};
6
Richard

ES6の場合:

var temp = str.split(",").map((item)=>item.trim());
6
Chaos

私はそれを単純に保ち、代わりに参加することを許可されているすべてのに一致しない

str.split(/[^a-zA-Z-]+/g).filter(v=>v);

これは、間にある許可されていない文字の間にあるすべてのギャップに一致します。最初と最後の空のエントリを取り除くには、null以外の値の単純なフィルタを使用します。 regex101の詳細説明 を参照してください。

var str = ", ,, ford,    tempo, with,,, sunroof,, ,";

var result = str.split(/[^a-zA-Z-]+/g).filter(v=>v).join(',');

console.info(result);
0
Benny Bottema