Использование регулярного выражения removeClass для удаления нескольких префиксов классов

#jquery #regex

#jquery #регулярное выражение

Вопрос:

Приведенный ниже jQuery выполняет поиск и удаляет все классы, содержащие мой префикс bg- . Он используется в теле для удаления любых bg- классов с префиксами, т.Е. bg-red bg-opacity и так далее.

Я хотел бы отредактировать это, чтобы иметь возможность обрабатывать несколько префиксов, т.е. bg- и text- , но я изо всех сил пытаюсь заставить это работать.

Кто-нибудь знаком с регулярным выражением и может помочь?

 body.removeClass(function (index, css) {
  return (css.match (/(^|s)bg-S /g) || []).join(' ');
});
 

Комментарии:

1. Вы можете использовать чередование b(?:bg|text)-S

2. еще один вопрос закрыт на полпути простым ответом. (^|s)(bg-|ab-|cd-)S позволяет использовать префиксы bg- , ab- , cd- для демонстрации regexr.com/5h67s

3. Да, действительно неприятно, что это было закрыто, другой вопрос не решает это для меня

Ответ №1:

Во многом так же, как в начале вашего регулярного выражения выполняется поиск начала строки (^ ) или ( | ) пробел ( s ), вы можете использовать тот же метод для поиска вариантов вашего префикса

 (^|s)(bg-|ab-|cd-)S 
 

Это позволяет префиксам bg- , ab- , cd- демонстрировать

Живой пример: https://regexr.com/5h67s

Ответ №2:

Вам не нужно разбивать его, чтобы присоединиться к нему снова. Просто использовал replace.

Также вместо добавления пробела просто верните совпадение с первой скобкой.

 body.removeClass(function (index, css) {
  return css.replace(/(^|s)(bg|text)-S /g), '$1');
});
 

Ответ №3:

Вы могли бы использовать String.prototype.replace() непосредственно на .attr("class")

 $("div").attr("class", (i, cl) => cl.replace(/(^|s)(bg|text)-w /g, ""));

console.log($("div").attr("class")); // "foo bar-ola baz" 
 <div class="foo bg-red bar-ola baz text-blue"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>