Table of Contents
Quick Take
import { strict as assert } from "assert";
import {
matchLeftIncl,
matchRightIncl,
matchLeft,
matchRight,
} from "string-match-left-right";
// 3rd character is "d" because indexes start from zero.
// We're checking the string to the left of it, "bcd", inclusive of current character ("d").
// This means, "bcd" has to end with existing character and the other chars to the left
// must match exactly:
assert.equal(matchLeftIncl("abcdefghi", 3, ["bcd"]), "bcd");
// neither "ab" nor "zz" are to the left of 3rd index, "d":
assert.equal(matchLeft("abcdefghi", 3, ["ab", `zz`]), false);
// "def" is to the right of 3rd index (including it), "d":
assert.equal(matchRightIncl("abcdefghi", 3, ["def", `zzz`]), "def");
// One of values, "ef" is exactly to the right of 3rd index, "d":
assert.equal(matchRight("abcdefghi", 3, ["ef", `zz`]), "ef");
The Callback Use
import { strict as assert } from "assert";
import {
matchLeftIncl,
matchRightIncl,
matchLeft,
matchRight,
} from "string-match-left-right";
// imagine you looped the string and wanted to catch where does attribute "class" start
// and end (not to mention to ensure that it's a real attribute, not something ending with this
// string "class").
// You catch "=", an index number 8.
// This library can check, is "class" to the left of it and feed what's to the left of it
// to your supplied callback function, which happens to be a checker "is it a space":
function isSpace(char) {
return typeof char === "string" && char.trim() === "";
}
assert.equal(
matchLeft('<a class="something">', 8, "class", { cb: isSpace }),
"class"
);