string-match-left-right examples

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"
);