J'ai du mal à traduire cela en Ruby.
Voici un morceau de JavaScript qui fait exactement ce que je veux faire:
function get_code(str){
return str.replace(/^(Z_.*): .*/,"$1");
}
J'ai essayé gsub , sub , et replace mais aucun ne semble faire ce que j'attendais.
Voici des exemples de choses que j'ai essayées:
"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 }
Essayez '\1'
pour le remplacement (guillemets simples sont importants, sinon vous devez vous échapper du \
):
"foo".gsub(/(o+)/, '\1\1\1')
#=> "foooooo"
Mais comme vous semblez ne vous intéresser qu'au groupe de capture, notez que vous pouvez indexer une chaîne avec une regex:
"foo"[/oo/]
#=> "oo"
"Z_123: foobar"[/^Z_.*(?=:)/]
#=> "Z_123"
\1
entre guillemets doubles doit être échappé. Donc vous voulez soit
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, "\\1")
ou
"Z_sdsd: sdsd".gsub(/^(Z_.*): .*/, '\1')
voir la documentation sur gsub où il est écrit "S'il s'agit d'une chaîne entre guillemets doubles, les deux références arrière doivent être précédées d'une barre oblique inverse supplémentaire."
Cela dit, si vous voulez juste le résultat du match, vous pouvez le faire:
"Z_sdsd: sdsd".scan(/^Z_.*(?=:)/)
ou
"Z_sdsd: sdsd"[/^Z_.*(?=:)/]
Notez que le (?=:)
est un groupe sans capture, de sorte que le :
n'apparaît pas dans votre match.
"foobar".gsub(/(o+)/){|s|s+'ball'}
#=> "fooballbar"
Si vous devez utiliser une expression rationnelle pour filtrer certains résultats et utiliser ensuite uniquement le groupe de capture, vous pouvez procéder comme suit:
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"