JSFiddle - React, Tailwind, and code Playground

by Sahin Deniz

JavaScript 1.7

let pattern = `l[a-z]?m`;

pattern = pattern.replace(
  /(?:[\p{L}\p{N}](?![^[]*\]))|(?:[\p{L}\p{N}](?![^[]*\]))|\[.*?\]\??/giu,
  AppendAnyCharModifier
);

function AppendAnyCharModifier(_char, singleChar) {
  let length = 1;
  let char = _char;

  console.log(char, singleChar);
  if (singleChar && typeof singleChar !== "number") {
    length = char.length;
    char = singleChar;
  }
  
  let excludedChars = "şğ"

  if (char.startsWith("[") && char.endsWith("]?")) {
    length = 0;
    char = char.replace("?", "");

    if (char.includes("a-z"))
      char = char.replace(/a-z/i, `a-z${excludedChars}`);
  } else if (char.startsWith("[") && char.endsWith("]")) length = 1;

  return `${char}{${length},}[\\W_]{0,}`;
}

pattern = pattern.replace(/\[\\W_]\{0,}$/, "");
let regexp = new RegExp(pattern, "i");
console.log(regexp);

console.log("lo@rem".match(regexp));