Techioz Blog

Rubyはキャプチャされた正規表現パターンで文字列を置換します

概要

これをRubyに変換するのに苦労しています。

これは私がやりたいことを正確に実行する JavaScript の一部です。

function get_code(str){
    return str.replace(/^(Z_.*): .*/,"$1")​​​​​​​​​​​​​​​​​​​​​​​​​​​;
}

gsub、sub、replace を試しましたが、どれも私が期待していることをしてくれないようです。

私が試したことの例を次に示します。

"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/) { |capture| capture }
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "$1")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "#{$1}")
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\1")
"Z_sdsd: sdsd".gsub(/(.).*/) { |capture| capture }

解決策

置換として ‘\1’ を試してみます (一重引用符が重要です。それ以外の場合は  をエスケープする必要があります)。

"foo".gsub(/(o+)/, '\1\1\1')
#=> "foooooo"

ただし、キャプチャ グループのみに興味があるようですので、正規表現を使用して文字列のインデックスを作成できることに注意してください。

"foo"[/oo/]
#=> "oo"
"Z_123: foobar"[/^Z_.*(?=:)/]
#=> "Z_123"