これを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"
二重引用符で囲まれた\1
はエスケープする必要があります。だからあなたはどちらかが欲しい
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\\1")
または
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, '\1')
gsubのドキュメント を参照してください。「二重引用符で囲まれた文字列の場合、両方の後方参照の前に追加の円記号が必要です。」
そうは言っても、試合の結果だけが必要な場合は、次のようにします。
"Z_sdsd: sdsd".scan(/^Z_.*(?=:)/)
または
"Z_sdsd: sdsd"[/^Z_.*(?=:)/]
(?=:)
は非キャプチャグループであるため、:
は対戦に表示されないことに注意してください。
"foobar".gsub(/(o+)/){|s|s+'ball'}
#=> "fooballbar"
正規表現を使用して一部の結果をフィルタリングする必要があり、THENがキャプチャグループのみを使用する場合、以下を実行できます。
str = "Leesburg, Virginia 20176"
state_regex = Regexp.new(/,\s*([A-Za-z]{2,})\s*\d{5,}/)
# looks for the comma, possible whitespace, captures alpha,
# looks for possible whitespace, looks for Zip
> str[state_regex]
=> ", Virginia 20176"
> str[state_regex, 1] # use the capture group
=> "Virginia"
def get_code(str)
str.sub(/^(Z_.*): .*/, '\1')
end
get_code('Z_foo: bar!') # => "Z_foo"