§ Quick Take

import { strict as assert } from "assert";
import indx from "str-indexes-of-plus";

// searches for string in a string, returns array:
assert.deepEqual(indx("abc-abc-abc-abc", "abc"), [

// all graphemes are counted as one, emoji too:
  indx("🐴-🦄", "🦄"),
  [2] // not [3] considering unicorn is 2-characters long

// you can offset the start of a search:
assert.deepEqual(indx("abczabc", "abc", 3), [4]);

§ Compared to Others

method / programreturnsindex system based on
String.prototype.indexOf() opens in a new tabindex where the first finding startscode point count
str-indexes-of opens in a new tabarray of indexes where each finding startscode point count
📦 This package,
array of indexes where each finding startsgrapheme count

See this opens in a new tab article about Unicode, graphemes and code points.



In other words, it's a function which takes three arguments, third one is optional (marked by square brackets).

Output: an array of zero or more numbers, each indicating the index of each finding's first character. Unicode astral characters are counted, as one character-long.

Input argumentTypeObligatory?Description
strstringyesSource string, where to search.
searchValuestringyesWhat to search for.
fromIndexnatural number or zeronoIf set, the searching will start from this index.

§ Trivia

Roy asked ~Shinnn opens in a new tab is it all right to create grapheme-count-based-index alternative of his str-indexes-of opens in a new tab and he said it's OK.

§ Changelog

See it in the monorepo opens in a new tab, on GitLab.

§ Licence

MIT opens in a new tab

Copyright © 2010–2020 Roy Revelt and other contributors

Related packages:

📦 str-indexes-of opens in a new tab
Like String#indexOf() but return all indexes
📦 edit-package-json 0.1.38
Edit package.json without parsing, as string, to keep the formatting intact
📦 easy-replace 3.8.1
Replace strings with optional lookarounds, but without regexes
📦 email-all-chars-within-ascii 2.9.74
Scans all characters within a string and checks are they within ASCII range
📦 js-row-num 2.7.29
Update all row numbers in all console.logs in JS code
📦 string-collapse-white-space 7.0.1
Replace chunks of whitespace with a single spaces
📦 string-collapse-leading-whitespace 3.0.3
Collapse the leading and trailing whitespace of a string