2

私はこの正規表現を使用[^\s\da-zA-ZåäöÅÄÖ]+$しています-AZ、0〜9、およびスウェーデン語の文字以外のものを除外しますÅÄÖ。文字列が空白で終わっていない限り、期待どおりに機能します。文字列が空白で終わっていても、文字列を受け入れるようにするために何が正しいかについて少し混乱しています。そこ\sにありますが、明らかに十分ではありません。

私の正規表現の何が問題になっていますか?

"something #¤%&/()=?".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '') # => a string


"something ending with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '')# => a string ending with space #¤%&/()=? 
4

2 に答える 2

2

否定された文字クラス(「 スペース、数字、文字などではないもの」)を使用しているため、正規表現が一致しません。

\sそこからドロップし、 $(文字列の最後に一致を結び付ける)もドロップすると、機能するはずです。

文字列内にスペースを残し、最後にスペースを削除するだけの場合は、次を使用します。

"something with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+|\s+$/g, '')

結果:

something with whitespace
于 2012-10-19T11:28:27.820 に答える
2

正規表現には、「次の範囲にない文字の1つ以上のインスタンスに一致し、その後に文字列の終わりが続く」と書かれています。これは基本的に、正規表現が文字列の最後に表示される許可されていない文字のシーケンスにのみ一致することを意味します。テスト文字列はロジックで許可されている空白で終わるため、「文字列の最後に表示される許可されていない文字のシーケンス」はなく、正規表現は何にも一致しません。

$正規表現の末尾からを削除し、代わりにgフラグを使用して、指定された文字範囲にないものを空の文字列にグローバルに置き換えると、目的のフィルタリングを実現できます。

さらに末尾の空白を削除する場合は、別の正規表現を使用するか、より単純なtrimRight呼び出しを使用することをお勧めします。

于 2012-10-19T11:29:26.163 に答える