Ctrl K
ComunidadGuías…

shared/utils/string.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
/**
 * Simple string hash using the djb2 algorithm, returns a hex string.
 *
 * @param str the string to hash.
 * @returns a hex-encoded 32-bit hash.
 */
export function hashString(str: string): string {
  let hash = 5381;
  for (let i = 0; i < str.length; i++) {
    hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;
  }
  return (hash >>> 0).toString(16);
}

/**
 * Returns the index of the first occurrence of a substring in a string that matches a regular expression.
 *
 * @param text The string to search in.
 * @param re The regular expression to search for.
 * @param startPos The position in the string at which to begin the search. Defaults to 0.
 */
export const regexIndexOf = function (
  text: string,
  re: RegExp,
  startPos?: number
) {
  startPos = startPos || 0;

  if (!re.global) {
    const flags = "g" + (re.multiline ? "m" : "") + (re.ignoreCase ? "i" : "");
    re = new RegExp(re.source, flags);
  }

  re.lastIndex = startPos;
  const match = re.exec(text);

  if (match) {
    return match.index;
  } else {
    return -1;
  }
};

/**
 * Returns the index of the last occurrence of a substring in a string that matches a regular expression.
 *
 * @param text The string to search in.
 * @param re The regular expression to search for.
 * @param startPos The position in the string at which to begin the search. Defaults to the end of the string.
 */
export const regexLastIndexOf = function (
  text: string,
  re: RegExp,
  startPos?: number
) {
  startPos = startPos === undefined ? text.length : startPos;

  if (!re.global) {
    const flags = "g" + (re.multiline ? "m" : "") + (re.ignoreCase ? "i" : "");
    re = new RegExp(re.source, flags);
  }

  let lastSuccess = -1;
  for (let pos = 0; pos <= startPos; pos++) {
    re.lastIndex = pos;

    const match = re.exec(text);
    if (!match) {
      break;
    }

    pos = match.index;
    if (pos <= startPos) {
      lastSuccess = pos;
    }
  }

  return lastSuccess;
};