Bahasa Melayu

Teks & alat harian · Kit Alat Teks

Kumpulan tangkapan regex dalam cari dan ganti: susun semula tarikh dengan $1, $2, $3

· Bagaimana ia berfungsi

regex cari-dan-ganti tarikh

Tiga medan tarikh yang ditangkap bergerak dari tahun-bulan-hari kepada hari-bulan-tahun tertib
Ilustrasi vektor ToolAcre asal

Menunjukkan cara kurungan menangkap bahagian padanan dan cara $1, $2 dan $3 menggunakannya semula sebagai pengganti, menggunakan tarikh klasik ISO-ke-hari-bulan-tahun menulis semula dan beberapa susunan semula yang lain.

Empat ratus tarikh dalam susunan yang salah — mengapa menyunting 2024-01-02 ke dalam 02/01/2024 ialah tugas untuk kumpulan tangkap

Eksport hamparan boleh meninggalkan empat ratus tarikh dalam susunan ISO gaya tahun-bulan apabila lembaran kerja UK menjangkakan hari/month/year. Mengedit `2024-01-02` menjadi `02/01/2024` dengan tangan adalah perlahan, tetapi risiko yang lebih besar adalah tidak konsisten: satu angka yang dilangkau boleh bertahan atau satu digit yang dilangkau boleh bertahan.

Cari dan ganti boleh menganggap setiap tarikh sebagai susunan bahagian yang sama dan bukannya sebagai empat ratus rentetan yang tidak berkaitan. Ungkapan biasa mengenal pasti tahun, bulan dan hari, manakala penggantian menulis bahagian yang ditangkap kembali dalam susunan lain. Digit asal digunakan semula, jadi operasi mengubah struktur daripada menaip semula nilai.

Apa yang ditangkap oleh kurungan — cara setiap kumpulan mendapat nombor dari kiri ke kanan dan apakah \d{4} dan \d{2} padanan

Tanda kurung membuat kumpulan tangkapan. Dalam `(\d{4})-(\d{2})-(\d{2})`, kumpulan pertama menangkap empat digit, yang kedua menangkap dua dan yang ketiga menangkap dua. `\d` bermaksud digit dalam corak JavaScript ini, manakala `{4}` dan `{2}` menyatakan bilangan ulangan yang diperlukan dalam setiap kumpulan.

Kumpulan menerima nombor daripada setiap kurungan pembukaan semasa enjin membaca dari kiri ke kanan. Untuk `2024-01-02`, kumpulan 1 ialah `2024`, kumpulan 2 ialah `01` dan kumpulan 3 ialah `02`; tanda sempang sepadan dengan pemisah tetapi terletak di luar kurungan, jadi ia tidak dikekalkan sebagai nilai yang ditangkap.

Menggunakan $1, $2 dan $3 sebagai pengganti — membina semula perlawanan dalam susunan baharu dengan pemisah baharu

Pengganti `$3/$2/$1` meminta JavaScript untuk memasukkan tangkapan ketiga, sebatan, tangkapan kedua, sebatan lain dan tangkapan pertama. Digunakan pada contoh, rujukan tersebut menghasilkan `02/01/2024`. Rujukan dolar ialah arahan penggantian, bukan teks yang mesti dipaparkan pada tarikh yang dipadankan.

ToolAcre menghantar rentetan gantian kepada operasi penggantian rentetan JavaScript standard. Sumbernya secara jelas menyokong rujukan bernombor seperti `$1`, `$2` dan `$3` dan corak carian disusun secara global. Bendera global itulah sebabnya setiap tarikh padanan ditulis semula dalam satu operasi dan bukannya pada perlawanan pertama sahaja.

Contoh yang berfungsi — (\d{4})-(\d{2})-(\d{2}) digantikan dengan $3/$2/$1, kemudian menyemak kiraan penggantian berbanding kiraan baris

Tampal lajur yang dieksport, hidupkan Regex, masukkan `(\d{4})-(\d{2})-(\d{2})` dalam Cari dan masukkan `$3/$2/$1` dalam Ganti. Memilih Gantikan semua mula-mula mengira padanan dan kemudian menulisnya semula, jadi hasilnya melaporkan bilangan rentetan berbentuk tarikh yang ditukar merentas keseluruhan teks yang ditampal.

Bandingkan nombor itu dengan kiraan baris yang dijangkakan sebelum menyalin keputusan kembali ke hamparan. Kiraan yang lebih rendah menunjukkan kepada kosong atau tarikh dalam format lain; kiraan yang lebih tinggi bermakna teks yang serupa di tempat lain juga dipadankan. Alat ini tidak mempunyai pratonton gantian, jadi gunakan tindakan Buat asalnya jika kiraan atau output mendedahkan corak yang terlalu luas.

Lebih banyak susunan semula — 'Nama Keluarga, Nama Depan' kepada 'Nama Depan Nama Keluarga' dan menukar lajur senarai dua lajur

Prinsip yang sama boleh menukar `Surname, Forename` kepada `Forename Surname` apabila setiap baris pasti mengandungi satu koma: cari `([^,]+), ([^\r\n]+)` dan gantikan dengan `$2 $1`. Di sini setiap kumpulan menangkap teks pada satu sisi pemisah yang diketahui, dan bukannya menganggap bilangan digit yang tetap.

Pertukaran dua lajur bukanlah operasi jadual terbina dalam, walaupun dengan rangka kata yang luas. Ia berfungsi sahaja apabila teks yang ditampal mempunyai pembatas yang boleh dipercayai dan corak menerangkan sempadan garis dengan selamat. Nama dalam koma, medan hilang atau tab yang tidak konsisten memerlukan pembersihan atau corak yang lebih tepat sebelum sebarang penggantian pukal boleh dipercayai.

Lebih banyak susunan semula berfungsi sahaja apabila input mempunyai pemisah yang boleh dipercayai

Titik dalam corak bermaksud hampir semua aksara, jadi corak tarikh yang ditulis sebagai `(\d{4}).(\d{2}).(\d{2})` juga menerima garis miring, ruang atau huruf antara medan. Pelepasan aksara daripada titik literal sebagai `\.` dan lari daripada metacharacter lain apabila ia sepatutnya sepadan dengan diri mereka sendiri. Tanda kurung yang tidak sah atau kurungan yang belum selesai dilaporkan tanpa mengubah teks.

Penomboran kumpulan bermula pada 1, bukan 0. Tanda dolar juga mempunyai makna penggantian khas: `$&` memasukkan keseluruhan padanan dan `$$` menghasilkan satu tanda dolar literal. Tingkah laku ini terpakai walaupun semasa mod regex dimatikan kerana ToolAcre sahaja terlepas dari bahagian carian; ia tidak terlepas daripada rentetan gantian sebelum JavaScript memprosesnya.

Perkara yang tidak diliputi oleh ini — kumpulan dinamakan, lihat belakang dan nama bulan yang memerlukan jadual carian

Kumpulan bernombor boleh menyusun semula teks yang sudah ada dalam perlawanan, tetapi mereka tidak boleh menterjemah `Jan` ke dalam `01` kerana itu memerlukan carian dan bukannya menyusun semula. Artikel ini juga tidak bergantung pada kumpulan yang dinamakan atau lihat di belakang, yang kegunaan dan sokongan penyemak imbasnya melibatkan set pilihan yang berbeza daripada pembersihan eksport mudah ini.

Ungkapan tarikh menyemak bentuk, bukan kebenaran kalendar. Ia akan sepadan dengan `2024-99-88` kerana dua digit memenuhi setiap kumpulan yang lebih kecil. Sahkan tarikh dalam hamparan atau sistem sumber apabila ketepatan penting. Cari dan ganti adalah sesuai untuk pemformatan yang konsisten, bukan untuk membuktikan bahawa setiap bulan dan hari yang ditangkap adalah sah.

Bawa pulang — satu corak, satu penggantian, setiap baris ditetapkan sekali gus dalam Kit Alat Teks, dengan buat asal jika hasilnya tidak seperti yang anda harapkan

Kumpulan tangkap menukar satu rentetan yang dipadankan menjadi kepingan yang boleh diguna semula. Untuk lajur tarikh seragam, tiga kumpulan mengekalkan tahun, bulan dan hari asal manakala `$3/$2/$1` meletakkannya dalam susunan UK. Carian global mengendalikan semua perlawanan, dan kiraan yang dilaporkan membekalkan semakan segera terhadap bilangan baris yang anda ingin ubah.

Pastikan aliran kerja boleh disemak: simpan salinan eksport, gunakan corak paling sempit yang sesuai dengannya, bandingkan kiraan, periksa beberapa keputusan dan buat asal apabila bukti tidak bersetuju dengan jangkaan anda. Satu penggantian berskop baik boleh mengalih keluar pengeditan berulang tanpa berpura-pura bahawa setiap nilai berbentuk digit secara automatik adalah tarikh yang sah.