スペースをダッシュ​​に置き換え、すべての文字を小文字にします


247

jQueryまたはバニラJavaScriptを使用して文字列を再フォーマットする必要があります

私たちは持っているとしましょう"Sonic Free Games"

に変換したい"sonic-free-games"

したがって、空白はダッシュに置き換え、すべての文字を小文字に変換する必要があります。

これについて何か助けてください?

回答:


549

たとえば、文字列replacetoLowerCaseメソッドを使用するだけです。

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

gフラグに注意してください。これにより、文字列内でグローバルRegExp置換れます。使用しない場合は、最初に出現したものだけが置換され、RegExp1つ以上の空白文字と一致します。


52
私が思いついたバリエーションでは、英数字以外の文字を表す\ Wを使用しています。これは、「ap-grocery」になる「A&P Grocery」のようなものに役立ちます。str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk、2014

1
マインド正規表現の部分を引用していない、すなわちreplace(/\s+/g, ..及びません replace('/\s+/f', ..(アポストロフィなし)
アッティラFulop

文字列の最初と最後のスペースを削除するにはどうすればよいですか?
Romel Indemne

@RomelIndemne今では使用することができますString.prototype.trim:方法str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

ありがとう、いいもの。xD JKの別の方法が必要です
lawphotog

34

上記の答えは少し混乱していると考えることができます。文字列メソッドは元のオブジェクトを変更しません。新しいオブジェクトを返します。それは違いない:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
受け入れられた回答はこの概念を組み込むために編集されたことに注意することが重要だと思います
Dexygen '31

31

splitand も使用できますjoin

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

サイドケースに注意してください。たとえば、先頭にスペースがある場合、置き換えられません
Bonjour123

1

CMSの答え@だけで結構ですが、私はあなたがこのパッケージを使用できることに注意してくださいにしたい:https://github.com/sindresorhus/slugify、あなたとカバー多くのエッジケース(すなわち、ドイツ語のウムラウトのためにそれをしない、ベトナム語、アラビア語、ロシア語、ルーマニア語、トルコ語など)。


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