67

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

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

編集 3

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

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

m.buettner に感謝します。

4

5 に答える 5

92

あなたのパターンは問題ないようです。 multiline modifier を含めるだけでよいmので、行頭^$行末も一致します。

/^\s*\n/gm

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

UNIX スタイルの行末を見逃していることに注意してください (のみ\r)。これはその場合に役立ちます:

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

また、(どちらの場合も)によって処理されるため、明示的に\rの前にあるオプションを一致させる必要はないことに注意してください。\n\s*

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

/^\s*$(?:\r\n?|\n)/gm
于 2013-05-04T01:34:12.073 に答える
22

私はこれがうまくいくと信じています

searchText.replace(/(^[ \t]*\n)/gm, "")
于 2013-05-04T01:21:15.027 に答える
7

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

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

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

于 2013-05-04T01:23:53.973 に答える