Aroused
@Aroused

Как заменить подстроку, которая содержит подстроку?

Пытаюсь заменить все классы содержащие "-vol-"
var classes =
'vskin-btn vskin-btn-type-single vskin-btn-mute vskin-vol-high vskin-vow-high vskin-vol-low';
console.log(classes.replace(/\s([^\s]+?)-vol-([^\s$]+?)/g, ''));
// но, результат
// vskin-btn vskin-btn-type-single vskin-btn-muteigh vskin-vow-highow
// а ожидалось
// vskin-btn vskin-btn-type-single vskin-btn-mute vskin-vow-high

Шаблон начинается с пробела, затем любые символы кроме пробела до подстроки "-vol-", и еще символы кроме пробела и конца строки.

Как я считаю что должно происходить?
Первое вхождение будет сброшено на втором пробеле, второе на третьем пробеле,
а третье вхождение точное и вырежет подстроку " vskin-vol-high", должно остаться:
vskin-btn vskin-btn-type-single vskin-btn-mute vskin-vow-high vskin-vol-low

Снова поиск с начала строки.
У нас три сброса и вырезаем "vskin-vol-low", должно остаться:
vskin-btn vskin-btn-type-single vskin-btn-mute vskin-vow-high

Почему результаты разные?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
1) Без регулярных выражений
var result = classes.split(' ').filter(function(substr) {
	return substr.indexOf('-vol-') < 0;
}).join(' ');

2) "Жадный" поиск
var result = classes.replace(/\s([^\s]+?)-vol-([^\s$]+)/g, '');

3) "Ленивый поиск"
var result = classes.replace(/\s([^\s]+?)-vol-([^\s$]+?)\b/g, '');

Живой пример

Источники
regex101.com
Жадные и ленивые квантификаторы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы