Мне нужно удалить все классы из начала элемента с помощью "layout-"
Я попробую:
var regex = new RegExp('\b' + 'layout-' + '.*?\b', 'g');
$(el)[0].className = $(el)[0].className.replace(regex, '');
но это не сработает. Решение может быть в jQuery. Есть идеи?
RegExp, который вы разместили в вопросе, не работает, потому что \b
не экранируется как \\b
. Следовательно, фактический RegExp становится /layout-.*?/g
вместо /\blayout-.*?\b/g
. Выполнение приведенного ниже изменения будет работать.
var regex = new RegExp('\\b' + 'layout-' + '.+?\\b', 'g');
Вы также можете попробовать, как показано ниже. Это удаляет все классы, похожие на layout-X
var regex = /(\s)*(layout-.*?)(?=\s)/g;
$('#test')[0].className = $('#test')[0].className.replace(regex, '');
Вход: class=sample layout-10 layout-9 sample1 slayout
Выход: class=sample sample1 slayout
RegExp Разъяснение:
\s
- любой символ пробела
(layout-.*?)
- Захват всех значений, таких как layout- X, где X может быть любым символом любое количество раз
(?=\s)
- Посмотрите вперед до следующего символа пробела (что означает до конца слова)
Как указано musefan в комментариях var regex =/\blayout-.+?\b/g;
также будет выполнять эту работу.
/\blayout-.+?\b/g
(\s)*
изначально. Текущий в моем ответе не заменит layout-X
если это первый класс. Исправляя это сейчас.
layout-
class="class1 layout-something"
- это должно сохранитьclass1
?