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'attends.
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 }
Réponses:
Essayez
'\1'
le remplacement ( les guillemets simples sont importants, sinon vous devez échapper à\
):Mais comme vous ne semblez être intéressé que par le groupe de capture, notez que vous pouvez indexer une chaîne avec une expression régulière:
la source
-e
), il est plus probable de voir des guillemets doubles :printf "Punkinhead the name" | ruby -ne 'puts gsub /.*(the name)/, "Jonathans \\1"'
parce que l'expression fournie à-e
est généralement entourée de guillemets simples.\1
entre guillemets doit être échappé. Alors tu veux non plusou
voir la documentation sur gsub où il est dit "S'il s'agit d'une chaîne entre guillemets, les deux références arrière doivent être précédées d'une barre oblique inverse supplémentaire."
Cela étant dit, si vous voulez juste le résultat du match, vous pouvez faire:
ou
Notez que le
(?=:)
est un groupe non capturant afin que le:
n'apparaisse pas dans votre correspondance.la source
la source
Si vous devez utiliser une expression régulière pour filtrer certains résultats, et ALORS utiliser uniquement le groupe de capture, vous pouvez effectuer les opérations suivantes:
la source
la source
$
les variables ne sont définies que pour les correspondances dans le bloc:C'est également la seule façon d'appeler une méthode sur la correspondance. Cela ne changera pas la correspondance, seulement
strip
"\ 1" (en le laissant inchangé):la source