Разделить строку регулярным выражением

Функция parse принимает строку и массив с символами (y)~["!", "%",...], которыми он отрежет всю правую часть строки: строка "Раз, два!, три" => "Раз, два". Или: "Раз, д%ва!, три" => "Раз, д"

function parse(str, y) {
      q = "";
      for (i = 0; i < y.length; i++) {
        q += y[i];
      }
      result = str.split("/[" + q + "]+/");
      return result[0];
    }

Логика следующая, режем строку этими символами и возвращаем [0] элемент строки. Если задать жестко str.split(/[!%]+/), то работает корректно. Если вместo !% поставить переменную, не выходит. Скорее всего, что регулярное выражение становится строкой.


Ответы (3 шт):

Автор решения: Daniil Loban

Для вашей задачи можно использовать ИЛИ - | знак + в этом случае лишний

"Раз, два!, три".split(/%|!/) // [ "Раз, два", ", три" ]

"Раз, два%, три".split(/%|!/) // [ "Раз, два", ", три" ]

Раз, два!,три%,четыкре".split(/%|!/) // [ "Раз, два", ",три", ",четыкре"]

→ Ссылка
Автор решения: UModeL

let aDel = ["!", "%"];

function parse(str, y) {
  let rExp = new RegExp(`[${y.join('')}]`);
  return str.split(rExp)[0];
}

console.log(parse('Раз, два!, три', aDel));
console.log(parse('Раз, д%ва!, три', aDel));

→ Ссылка
Автор решения: Sudo Trololo

Спасибо за подсказку. Оказалось что массив можно передавать как есть, тоже работает.

    function parse(str, arr) {
      regExp = new RegExp(`[${arr}]`);
      return str.split(regExp)[0];
    }

console.log(parse("s#d!f%sl!dfjskdl df%ks sdf ! dsdf! dsf sd f", ["%", "!", "#"]));
→ Ссылка