2011-11-14 6 views
0

周囲に空白のないダッシュを含む文章があります。私はスペースを挿入したいが、もし存在しない場合にのみ(スペースを2倍にしたくない)。Javascript RegEx作成方法: "word1-word2"から "word1 - word2"

"word1—word2" to "word1 — word2" 

...ではなく:

"word1 — word2" to "word1 — word2" 

私は私がこれをドットことができると思います:

text.replace(/—/g, " — ").replace(/ — /g, " — "); 

...しかし、達成するための簡単な方法があるかどうか、私は疑問に思いますゴール。

答えて

2
text.replace(/([^ ])-([^ ])/g, "$1 - $2"); 

これはすべきことです。

+0

ありがとうございます。あなたはこれが[^]を意味するのか説明できますか? [\ S]を使うことができますか? – WHITECOLOR

+0

'[^]'は単に「スペースではない文字」を意味します。それがあなたが求めていたものなので、私はそれを入れました。 '\ S'でもおそらく動作する可能性があります。 –

1

エスケープコード\bは、「ワード境界」の幅がゼロのアサーションです。 \b—\bのためにマッチングすることによって、ダッシュが各側に "単語"文字を持つ場合にのみ一致させます。

text.replace(/\b—\b/g, " — ");

アサーションがゼロ幅なので、あなたは正規表現を簡素化しており、グループを含める必要はありません。

+1

+1ですが、検索文字はハイフンではなく* [emダッシュ](http://en.wikipedia.org/wiki/Dash#Em_dash)*であることに注意してください。私はこれを反映するためにあなたの答えを編集しました。 –

0
text.replace(/(^|[^ ])-([^ ]|$)/g, "$1 - $2"); 

とする必要があります。

....replace(/ — /g, " — ")は、"foo- bar"のようにダッシュの片側だけにスペースがある場合、スペースを2倍にするため、機能しません。

0
text = text.replace(/\s*—\s*/g, " — "); 

すでに整形された文字列を指定すると、1つのスペースが1つのスペースに置き換えられますが、何も害を及ぼしません。空白がないか、多すぎるか、間違った種類がある場合は、1つのスペースに正規化されます。

関連する問題