Saya ingin mendapatkan posisi awal 2nd
terjadinya ABC
dengan seperti ini:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
Bagaimana Anda melakukannya?
javascript
Adam
sumber
sumber
nth
terjadinya, dalam hal ini yang kedua.Jawaban:
sumber
fromIndex
argumen secara iteratifString.indexOf
function getPosition(str, m, i) { return str.split(m, i).join(m).length; }
i
kemunculanm
. Artinya,getPosition("aaaa","a",5)
memberi4
, seperti halnyagetPosition("aaaa","a",72)
! Saya pikir Anda ingin -1 dalam kasus tersebut.var ret = str.split(m, i).join(m).length; return ret >= str.length ? -1 : ret;
Anda mungkin juga ingin menangkapi <= 0
denganreturn ret >= str.length || i <= 0 ? -1 : ret;
Anda juga dapat menggunakan string indexOf tanpa membuat array apa pun.
Parameter kedua adalah indeks untuk mulai mencari kecocokan berikutnya.
sumber
i
dapat dibuat kurang membingungkan:var i; for (i = 0; n > 0 && i !== -1; n -= 1) { i = str.indexOf(pat, /* fromIndex */ i ? (i + 1) : i); } return i;
Bekerja dari jawaban kennebec, saya membuat fungsi prototipe yang akan mengembalikan -1 jika kemunculan ke-n tidak ditemukan daripada 0.
sumber
String.prototype.nth_index_of
. Bahkan jika Anda merasa nama Anda unik dan cukup gila, dunia akan membuktikan bahwa nama Anda bisa dan akan menjadi lebih gila.INSERT
sebagaimysqli_real_escape_string
tidak tidak melindungi terhadap hacks kutip tunggal. Banyak pengkodean profesional tidak hanya memiliki kebiasaan baik tetapi juga memahami mengapa kebiasaan seperti itu penting. :-)Karena rekursi selalu menjadi jawabannya.
sumber
~
) adalah operator NOT bitwise di JavaScript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Inilah solusi saya, yang hanya mengulangi string sampai
n
kecocokan ditemukan:sumber
Metode ini membuat fungsi yang memanggil indeks kejadian ke-n yang disimpan dalam sebuah array
sumber
Cara yang lebih singkat dan menurut saya lebih mudah, tanpa membuat string yang tidak perlu.
sumber
Menggunakan
indexOf
dan Rekursi :Pertama, periksa apakah posisi ke-n yang lewat lebih besar dari jumlah total kemunculan substring. Jika lolos, secara rekursif menelusuri setiap indeks hingga indeks ke-n ditemukan.
sumber
Menggunakan
[String.indexOf][1]
sumber
sumber
Saya bermain-main dengan kode berikut untuk pertanyaan lain di StackOverflow dan berpikir bahwa itu mungkin sesuai untuk di sini. Fungsi printList2 memungkinkan penggunaan regex dan mencantumkan semua kejadian secara berurutan. (printList adalah upaya untuk solusi sebelumnya, tetapi gagal dalam beberapa kasus.)
sumber