Ich möchte mit so etwas die Ausgangsposition des 2nd
Auftretens von bekommen ABC
:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
Wie würdest du es machen?
javascript
Adam
quelle
quelle
nth
Auftretens, in diesem Fall die zweite.Antworten:
quelle
fromIndex
Argument zu verwendenString.indexOf
function getPosition(str, m, i) { return str.split(m, i).join(m).length; }
i
Vorkommen von vorhanden sindm
. Das heißt,getPosition("aaaa","a",5)
gibt4
, wie auchgetPosition("aaaa","a",72)
! Ich denke, Sie wollen in diesen Fällen -1.var ret = str.split(m, i).join(m).length; return ret >= str.length ? -1 : ret;
Vielleicht möchten Sie auchi <= 0
mitreturn ret >= str.length || i <= 0 ? -1 : ret;
Sie können den String indexOf auch verwenden, ohne Arrays zu erstellen.
Der zweite Parameter ist der Index, mit dem nach der nächsten Übereinstimmung gesucht werden soll.
quelle
i
kann weniger verwirrend gemacht werden:var i; for (i = 0; n > 0 && i !== -1; n -= 1) { i = str.indexOf(pat, /* fromIndex */ i ? (i + 1) : i); } return i;
Ausgehend von Kennebecs Antwort habe ich eine Prototypfunktion erstellt, die -1 zurückgibt, wenn das n-te Vorkommen nicht gefunden wird, sondern 0.
quelle
String.prototype.nth_index_of
. Selbst wenn Sie denken, Ihr Name sei einzigartig und verrückt genug, wird die Welt beweisen, dass er verrückter sein kann und wird.INSERT
damysqli_real_escape_string
dies nicht vor Hacks in einfachen Anführungszeichen schützt. Ein Großteil der professionellen Codierung besteht nicht nur darin, gute Gewohnheiten zu haben, sondern auch zu verstehen, warum solche Gewohnheiten wichtig sind. :-)Weil Rekursion immer die Antwort ist.
quelle
~
) ist der bitweise NICHT-Operator in JavaScript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Hier ist meine Lösung, die nur über die Zeichenfolge iteriert, bis
n
Übereinstimmungen gefunden wurden:quelle
Diese Methode erstellt eine Funktion, die den Index der in einem Array gespeicherten n-ten Vorkommen aufruft
quelle
Kürzere Art und ich denke einfacher, ohne unnötige Zeichenfolgen zu erstellen.
quelle
Verwendung
indexOf
und Rekursion :Überprüfen Sie zunächst, ob die n-te übergebene Position größer ist als die Gesamtzahl der Teilzeichenfolgenvorkommen. Wenn bestanden, durchlaufen Sie rekursiv jeden Index, bis der n-te gefunden ist.
quelle
Verwenden von
[String.indexOf][1]
quelle
quelle
Ich habe mit dem folgenden Code für eine weitere Frage zu StackOverflow herumgespielt und dachte, dass dies hier angemessen sein könnte. Die Funktion printList2 ermöglicht die Verwendung eines regulären Ausdrucks und listet alle Vorkommen der Reihe nach auf. (printList war ein Versuch einer früheren Lösung, der jedoch in einigen Fällen fehlschlug.)
quelle