Я хотел бы получить начальную позицию 2nd
появления ABC
примерно так:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
Как бы ты это сделал?
javascript
Адам Халаш
источник
источник
nth
возникновения, в данном случае вторую.Ответы:
источник
fromIndex
аргумент дляString.indexOf
function getPosition(str, m, i) { return str.split(m, i).join(m).length; }
i
вхожденийm
. То естьgetPosition("aaaa","a",5)
дает4
, как делаетgetPosition("aaaa","a",72)
! Думаю, в таких случаях вам понадобится -1.var ret = str.split(m, i).join(m).length; return ret >= str.length ? -1 : ret;
Возможно, тебе захочется пойматьi <= 0
сreturn ret >= str.length || i <= 0 ? -1 : ret;
Вы также можете использовать строку indexOf без создания каких-либо массивов.
Второй параметр - это индекс для начала поиска следующего совпадения.
источник
i
можно сделать менее запутанным:var i; for (i = 0; n > 0 && i !== -1; n -= 1) { i = str.indexOf(pat, /* fromIndex */ i ? (i + 1) : i); } return i;
Отработав ответ Кеннебека, я создал функцию-прототип, которая вернет -1, если n-е вхождение не найдено, а не 0.
источник
String.prototype.nth_index_of
. Даже если вы думаете, что ваше имя уникально и достаточно безумно, мир докажет, что оно может и будет еще более безумным.INSERT
посколькуmysqli_real_escape_string
это не защищает от взлома одинарных кавычек. Большая часть профессионального кодирования - это не просто наличие хороших привычек, но и понимание того, почему они важны. :-)Потому что рекурсия - это всегда ответ.
источник
~
) - это побитовый оператор НЕ в JavaScript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Вот мое решение, которое просто перебирает строку, пока
n
не будут найдены совпадения:источник
Этот метод создает функцию, которая вызывает индекс n-х вхождений, хранящихся в массиве
источник
Короче и я думаю проще, без лишних строк.
источник
Использование
indexOf
и рекурсия :Сначала проверьте, больше ли n-я позиция, чем общее количество вхождений подстроки. Если передано, рекурсивно перебирать каждый индекс, пока не будет найден n-й.
источник
С помощью
[String.indexOf][1]
источник
источник
Я играл со следующим кодом для другого вопроса о StackOverflow и подумал, что он может быть уместным здесь. Функция printList2 позволяет использовать регулярное выражение и перечисляет все вхождения по порядку. (printList был попыткой более раннего решения, но в ряде случаев она не удалась.)
источник