Ruby gsub regex para agregar la primera igualada carácter en la cadena reemplazada
Pregunta
Tengo una pequeña regex fragmento de código en ruby por debajo de la cual está reemplazando ":[\w]" con":~'
>> "name: Name, phone_number: Phone Number, inactive: Inactive ".gsub(/[:]\s[\w]/, ': ~')
=> "name: ~ame, phone_number: ~hone Number, inactive: ~nactive "
¿Cómo puedo modificar el gsub expresión para agregar el primer carácter en la cadena reemplazada, yo.e:
=> "el nombre de:~Nombre, número_teléfono:~Número de teléfono, inactivo:~Inactivo "
Gracias
Solución
Primero, no necesitas []
Alrededor de un solo personaje/grupo de personajes especiales, ya que tiene sentido que desea agrupar varios personajes. Tu regex es equivalente a /:\s\w/
.
Para resolver su problema, puede usar un grupo de captura y reinsertar la carta capturada:
s.gsub(/:\s(\w)/, ': ~\1')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "
O use un LookAhead para no reemplazar la letra en primer lugar:
s.gsub(/:\s(?=\w)/, ': ~')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "
Tal vez prefieras querer usar /:\s+(?=\w)/
, que permitiría más de un espacio antes del próximo personaje.