2010-12-01 11 views
1

この正規表現:このにハイフンをスペースで置き換えるこの正規表現がハイフンをハイフンで置き換えるのを防ぐには?

The dog jumped over the lazy - chair 

str.replace(/ +/g, '-').toLowerCase(); 

がこれを変換します

the-dog-jumped-over-the-lazy---chair 

それは、この代わりに(のみハイフン)を産生するように、それを変更する方法:

the-dog-jumped-over-the-lazy-chair 
+8

ハイフンを私のために余分なハイフンに置き換えることはありません。あなたは正確な正規表現か、それともあなたの正確な入力文字列ですか? – BoltClock

+0

元の質問にはタイプミスがありました。私はそれを編集しました。 –

答えて

0

正規表現にハイフンを含めます。パターンが一致している必要があり、他の理由がないことから、変換ばかりそのハイフンの前後にスペースで、 -

str.replace(/[ -]+/g, '-').toLowerCase(); 
+1

残念ながら、既に存在する連続するハイフンのグループはすべて破棄されます。これが望ましいかもしれませんが、もしあなたの入力文字列が "何の---不可能!"ならば、余分なハイフンを保存するのではなく、結果は "不可能!"になります。 "What ---不可能!"の正しい出力(つまり、「何---不可能!」)は「何---不可能!」です、私の解決策では少し精巧な正規表現が必要です。 –

1

私はあなたの実際の入力が「椅子犬は怠け者を飛び越えた」であると仮定します。

明示的にハイフンのいずれかの側のスペースの文字列をチェック
str.replace(/(+- *)|(- +)|(+)/g, '-').toLowerCase(); 

過程で正確に一つのハイフンを消費し、(最初のパターンはまた、スペースを末尾に消費するように設計されて):

が、このお試しください。スペースで囲まれたハイフンが既に存在する場合、そのハイフンがマッチに含まれるため、ハイフンが書き込まれると、単に「置換」されます。この場合、空白は単に削除され、ハイフンは式の一部として取り込まれるため置換操作によって再作成されます。

関連する問題