Apakah ada cara untuk mengambil posisi karakter (mulai) di dalam string hasil pertandingan regex () di Javascript?
javascript
regex
match
string-matching
stagas
sumber
sumber
re
sebagai variabel, dan menambahkang
pengubah sama-sama penting! Kalau tidak, Anda akan mendapatkan loop tanpa akhir.undefined
. jsfiddle.net/6uwn1vof/2 yang bukan contoh pencarian seperti milik Anda.g
bendera dan itu akan berfungsi. Karenamatch
ini adalah fungsi dari string, bukan regex yang tidak boleh stateful sepertiexec
, jadi itu hanya memperlakukannya sepertiexec
(yaitu memiliki properti indeks) jika Anda tidak mencari kecocokan global ... karena dengan demikian statefulness tidak masalah .Inilah yang saya pikirkan:
sumber
match.index + match[0].length
juga berfungsi untuk posisi akhir.match.index + match[0].length - 1
?.slice()
dan.substring()
. Akhir inklusif akan menjadi 1 kurang seperti yang Anda katakan. (Berhati-hatilah karena inklusif biasanya berarti indeks pertandingan terakhir di dalam pertandingan, kecuali pertandingan kosong di mana pertandingan 1 sebelum pertandingan dan mungkin berada di-1
luar string sepenuhnya untuk pertandingan kosong di awal ...)Dari developer.mozilla.org dokumen tentang
.match()
metode String :Ketika berhadapan dengan regex non-global (yaitu, tidak ada
g
bendera pada regex Anda), nilai yang dikembalikan oleh.match()
memilikiindex
properti ... yang harus Anda lakukan adalah mengaksesnya.Berikut adalah contoh yang menunjukkan itu berfungsi juga:
Saya telah berhasil menguji ini semua jalan kembali ke IE5.
sumber
Anda dapat menggunakan
search
metodeString
objek. Ini hanya akan berfungsi untuk pertandingan pertama, tetapi sebaliknya akan melakukan apa yang Anda gambarkan. Sebagai contoh:sumber
Ini adalah fitur keren yang saya temukan baru-baru ini, saya mencoba ini di konsol dan sepertinya berfungsi:
Yang dikembalikan: "batas 6 bawah 13 kiri 18 radius"
Jadi sepertinya ini yang Anda cari.
sumber
arguments
yang merupakan posisi. Bukan "argumen kedua". Argumen fungsi adalah "pertandingan penuh, grup1, grup2, ...., indeks pertandingan, string penuh cocok dengan"Anggota ini fn mengembalikan array posisi berbasis 0, jika ada, dari kata input di dalam objek String
Sekarang coba
Anda juga dapat memasukkan ekspresi reguler:
Di sini kita mendapatkan indeks posisi istilah linear.
sumber
sumber
str.indexOf
di sini hanya menemukan kemunculan teks berikutnya yang ditangkap oleh pertandingan, yang belum tentu cocok. JS regex mendukung kondisi pada teks di luar tangkapan dengan lookahead. MisalnyasearchIndex("foobarfoobaz", "foo(?=baz)", true)
harus memberi[6]
, bukan[0]
.Di browser modern, Anda dapat melakukannya dengan string.matchAll () .
Manfaat dari pendekatan ini vs
RegExp.exec()
adalah bahwa ia tidak bergantung pada regex yang stateful, seperti dalam jawaban @ Gumbo .sumber
atau
sumber