9

先頭と末尾のスペースをすべて削除したいと思います。文字列内の複数のスペースを単一のスペースに置き換えるだけでなく、文字列内のすべての単語が単一のスペースで正確に区切られるようにします。

正規表現の次の 2 つの反復を使用して、単一の正規表現ソリューションを探して、これを達成できました。

s/^\s+|\s+$//g
s/\s+/ /g

サンプル入力:

   word1   word2 word3     word4    

望ましい出力:

word1 word2 word3 word4

これを解決するのを手伝っていただければ幸いです。

4

5 に答える 5

5

Javascript では、文字列プロトタイプには、これを管理できる 2 つのメソッドがあります。

str.trim().replace(/\s+/g, ' ')

str.trim()先頭と末尾のスペースを削除します

str.replace(regex, replacement)は、提供された文字列と比較され、一致した最初のインスタンスが に置き換えられstr、新しい文字列全体が返されます。regexreplacement

注意すべき重要な点: の最初のパラメーター.replaceを引用符でカプセル化しないでください。/regex/正規表現はスラッシュ ( )で区切られ、(最初は 0 で、最初のインスタンスを与える) にg基づいて最初または次のインスタンスを単に置き換えるのではなく、グローバルに (一致するすべてのインスタンス) を置き換えることを意味するために追加されます。提供されている2番目のリンクで、私が言及したすべてlastIndexの詳細を読むことができます.lastIndex

例:

var str = '  1 2  3   4  '
function trimReplace(str){
   newStr = str.trim().replace(/\s+/g, ' ');
   console.log(newStr);
}
trimReplace(str)

コンソールでこれを試してください: ' 1 2 3 4 '.trim().replace(/\s+/g, ' ')

「1 2 3 4」

_

regex: kleene 演算子は、複数のスペースの一致に使用される正規表現を理解するのに役立ちます

regex: regex と /g フラグに関する役立つガイド

Google: MDN string.protoype.trim()

Google: MDN string.prototype.replace()

于 2016-07-14T19:01:47.497 に答える
3

使用するawk

echo "   word1   word2 word3     word4  " | awk '{$1=$1}1'
word1 word2 word3 word4

これ$1=$1はすべてを集中させるためのトリックです。

使用することもできます

awk '$1=$1' file

しかし、最初のフィールドがそうでない場合00.0それは失敗します

于 2013-09-26T05:47:39.810 に答える
2

これはうまくいくかもしれません(GNU sed):

sed -r 's/((^)\s*(\S))|((\S)\s*($))|(\s)\s*/\2\3\5\6\7/g' file

または単に:

sed -r 's/(^\s*(\S))|((\S)\s*$)|(\s)\s*/\2\4\5/g file
于 2013-09-26T06:14:36.977 に答える
0

UNIX を使用している場合は、シェルのWord-splittingを利用できます。以下のコマンド置換を使用した Bash の例

STR="   word1   word2 word3     word4  "
z=$(echo $STR)
echo "$z"
word1 word2 word3 word4
于 2013-09-26T06:49:43.780 に答える