Tengo problemas para traducir esto a Ruby.
Aquí hay una pieza de JavaScript que hace exactamente lo que quiero hacer:
function get_code(str){
return str.replace(/^(Z_.*): .*/,"$1");
}
He probado gsub , sub y replace, pero ninguno parece hacer lo que esperaba.
Aquí hay ejemplos de cosas que he probado:
"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 }
Respuestas:
Pruebe
'\1'
el reemplazo (las comillas simples son importantes, de lo contrario, debe escapar\
):Pero como solo parece estar interesado en el grupo de captura, tenga en cuenta que puede indexar una cadena con una expresión regular:
fuente
-e
), es más probable que vea comillas dobles :printf "Punkinhead the name" | ruby -ne 'puts gsub /.*(the name)/, "Jonathans \\1"'
porque la expresión proporcionada a-e
generalmente está entre comillas simples.\1
entre comillas dobles debe omitirse. Entonces tu quiereso
consulte los documentos en gsub donde dice "Si es una cadena entre comillas dobles, ambas referencias inversas deben ir precedidas de una barra diagonal inversa adicional".
Dicho esto, si solo desea el resultado del partido, puede hacer:
o
Tenga en cuenta que
(?=:)
es un grupo que no captura, por lo que:
no aparece en su partido.fuente
fuente
Si necesita usar una expresión regular para filtrar algunos resultados y ENTONCES usar solo el grupo de captura, puede hacer lo siguiente:
fuente
fuente
$
las variables solo se establecen para coincidir con el bloque:Esta es también la única forma de llamar a un método en la coincidencia. Esto no cambiará la coincidencia, solo
strip
"\ 1" (dejándolo sin cambios):fuente