Saya punya kode HTML sebelum dan sesudah string:
name="some_text_0_some_text"
Saya ingin mengganti 0
dengan sesuatu seperti:!NEW_ID!
Jadi saya membuat regex sederhana:
.*name="\w+(\d+)\w+".*
Tetapi saya tidak melihat bagaimana cara mengganti secara eksklusif blok yang ditangkap.
Apakah ada cara untuk mengganti hasil yang diambil seperti ($ 1) oleh beberapa string lain?
Hasilnya adalah:
name="some_text_!NEW_ID!_some_text"
javascript
regex
Nicolas Guillaume
sumber
sumber
$
, jadi kata pertama(\w+)
adalah dalam grup, dan menjadi$1
, bagian tengah(\d+)
adalah grup kedua, (tetapi mendapat diabaikan di ganti), dan kelompok ketiga adalah$3
. Jadi, ketika Anda memberikan string pengganti"$1!new_ID!$3"
, $ 1 dan $ 3 diganti secara otomatis dengan grup pertama dan grup ketiga, memungkinkan grup kedua diganti dengan string baru, dengan mempertahankan teks yang mengelilinginya.Sekarang Javascript telah terlihat di belakang (pada ES2018 ), pada lingkungan yang lebih baru, Anda dapat menghindari grup sepenuhnya dalam situasi seperti ini. Alih-alih, lihat di belakang apa yang datang sebelum kelompok yang Anda tangkap, dan cari yang akan datang setelahnya, dan ganti dengan yang baru
!NEW_ID!
:Dengan metode ini, pertandingan penuh hanya bagian yang perlu diganti.
(?<=name="\w+)
- Cari di belakangname"
, diikuti oleh karakter kata (untungnya, lookbehinds tidak harus diperbaiki lebar dalam Javascript!)\d+
- Cocokkan satu atau lebih digit - satu-satunya bagian dari pola yang tidak terlihat, satu-satunya bagian dari string yang akan ada dalam pertandingan yang dihasilkan(?=\w+")
- Cari karakter kata yang diikuti oleh"
`Perlu diingat bahwa tampilan di belakang cukup baru. Ini berfungsi dalam versi modern V8 (termasuk Chrome, Opera, dan Node), tetapi tidak di sebagian besar lingkungan lain , setidaknya belum. Jadi, meskipun Anda dapat menggunakan lookbehind di Node dan di browser Anda sendiri (jika berjalan pada versi modern V8), itu belum didukung oleh klien acak (seperti di situs web publik).
sumber
\d+
, kan?match => match * 2
. Digit masih merupakan keseluruhan pertandingan, jadi tidak perlu untuk grupSedikit perbaikan pada jawaban Matius bisa menjadi pengintai alih-alih kelompok penangkapan terakhir:
Atau Anda dapat membagi desimal dan bergabung dengan id baru Anda seperti ini:
Contoh / Tolok Ukur di sini: https://codepen.io/jogai/full/oyNXBX
sumber
Dengan dua kelompok penangkap juga dimungkinkan; Saya juga akan menyertakan dua tanda hubung, sebagai batas kiri dan kanan tambahan, sebelum dan setelah angka, dan ekspresi yang dimodifikasi akan terlihat seperti:
Sirkuit RegEx
jex.im memvisualisasikan ekspresi reguler:
sumber
Opsi yang lebih sederhana adalah dengan hanya menangkap digit dan menggantinya.
Sumber daya
sumber