Saya mengalami masalah saat menerjemahkan ini ke dalam Ruby.
Berikut adalah bagian dari JavaScript yang melakukan persis apa yang ingin saya lakukan:
function get_code(str){
return str.replace(/^(Z_.*): .*/,"$1");
}
Saya telah mencoba gsub , sub , dan mengganti tetapi tampaknya tidak ada yang melakukan apa yang saya harapkan.
Berikut adalah contoh hal yang telah saya coba:
"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 }
Jawaban:
Coba
'\1'
penggantinya ( tanda kutip tunggal penting, jika tidak, Anda harus keluar dari\
):Tetapi karena Anda sepertinya hanya tertarik pada grup penangkapan, perhatikan bahwa Anda dapat mengindeks string dengan regex:
sumber
-e
), kemungkinan besar akan melihat tanda kutip ganda :printf "Punkinhead the name" | ruby -ne 'puts gsub /.*(the name)/, "Jonathans \\1"'
karena ekspresi yang diberikan kepada-e
biasanya dibungkus dalam tanda kutip tunggal.\1
dalam tanda kutip ganda harus di-escape. Jadi, Anda juga menginginkannyaatau
lihat dokumen di gsub di mana dikatakan "Jika ini adalah string kutip ganda, kedua referensi balik harus diawali dengan garis miring terbalik tambahan."
Karena itu, jika Anda hanya menginginkan hasil pertandingan, Anda dapat melakukan:
atau
Perhatikan bahwa
(?=:)
adalah grup non-penangkap sehingga:
tidak muncul dalam pertandingan Anda.sumber
sumber
Jika Anda perlu menggunakan regex untuk memfilter beberapa hasil, dan KEMUDIAN hanya menggunakan grup pengambilan, Anda dapat melakukan hal berikut:
sumber
sumber
$
variabel hanya disetel ke kecocokan ke dalam blok:Ini juga satu-satunya cara untuk memanggil metode pada pertandingan. Ini tidak akan mengubah kecocokan, hanya
strip
"\ 1" (biarkan tidak berubah):sumber