3

他のすべての文字 (何でもかまいません) を正規表現でスキップまたは置換するにはどうすればよいですか?

"abc123.-def45".gsub(/.(.)?/, '@')

取得するため

"a@c@2@.@d@f@5"
4

3 に答える 3

5

代わりに最初の文字をキャプチャし、書き戻します。

"abc123.-def45".gsub(/(.)./, '\1@')

2 番目の文字をオプションにしないことが重要です。そうしないと、長さが奇数の文字列では、最後の文字が一致し、a@が追加されます。がないと?、最後の文字は単純に失敗し、そのまま残ります。

動作デモ。

于 2013-06-13T10:31:34.507 に答える
1

シーケンス内の @ の置き換えを避けるためにこれを行うこともできます

"abc123.-def45".gsub(/([^@])[^@]/, '\1@')
于 2013-06-13T10:34:54.087 に答える