web-dev-qa-db-ja.com

JavaScript:正規表現を使用して文字列から空白行を削除する方法は?

JavaScriptを使用して、HTMLテキストボックスの空白行を削除する必要があります。空白行は、textarea要素内のどこにでも置くことができます。空白行は、改行または空白に改行を加えたものにすることができます。

これに対する正規表現の解決策を期待しています。ここに私が試したものがありますが、それらは機能しておらず、理由を理解できません:

/^\s*\r?\n/g   

/^\s*\r?\n$/g

編集1

Aaronmanとm.buettnerによって提案された解決策(私は少し変更しました)が動作しているようです:

string.replace(/^\s*\n/gm, "") 

誰かが私の最初の正規表現が機能しない理由を教えてもらえますか?

編集2

すべての有用な答えを読んだ後、私はこれを思いつきました:

/^[\s\t]*(\r\n|\n|\r)/gm

これはすべての状況をカバーするものになるでしょうか?

編集

これは、すべてのスペース(空白、タブ)およびプラットフォーム(Linux、Windows、Mac)をカバーする最も簡潔なものです。

/^\s*[\r\n]/gm

M.buettnerに感謝します!

44
curious1

あなたのパターンは大丈夫のようで、_^_と_$_が行の始まりと終わりにも一致するように、複数行修飾子mを含める必要があります:

_/^\s*\n/gm
_

mがない場合、アンカーは文字列の先頭と末尾にのみ一致します。

Macの行末を逃すことに注意してください(_\r_のみ)。これはその場合に役立ちます:

_/^\s*[\r\n]/gm
_

また、(両方の場合において)_\r_の前にあるオプションの_\n_を明示的に一致させる必要がないことに注意してください。これは_\s*_によって処理されるためです。

Dex がコメントで指摘したように、スペースのみで構成されている場合(そしてその後に改行がない場合)、最後の行をクリアできません。これを修正する方法は、実際の改行をオプションにするが、その前に行末アンカーを含めることです。この場合、doは、適切に終了する行と一致する必要があります。

_/^\s*$(?:\r\n?|\n)/gm
_
68
Martin Ender

これはうまくいくと思う

searchText.replace(/(^[ \t]*\n)/gm, "")
17
aaronman

これは私が考えるトリックを行う必要があります:

var el = document.getElementsByName("nameOfTextBox")[0];
el.value.replace(/(\r\n|\n|\r)/gm, "");

EDIT: 3種類の改行を削除します。

5
Bjørn Bråthen