#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/5h67s3. Да, действительно неприятно, что это было закрыто, другой вопрос не решает это для меня
Ответ №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>