2013-02-08 5 views
2

Я пытаюсь удалить весь стиль «цвета» из стиля элемента с помощью регулярного выражения, но я терпеть неудачу.JavaScript RegEx On Styles

Пример стиля

cursor: pointer;background-color: yellow;color: lightgray; 

Пример того, что стиль должен стать

cursor: pointer;background-color: yellow; 

Это регулярное выражение я использую color:[^;]+;

Она захватывает цвет фона и удаляет часть после фона.

+0

Прочтите тег [regex]: вы всегда должны точно уточнять инструмент, который используете. –

+0

Я использовал regex и regularexpression. – C3PO

+0

Да, но вы должны также * "включить тег, определяющий язык программирования или инструмент, который вы используете" * (см. Описание тега). –

ответ

2

Это регулярное выражение работает для меня:

[\s;]color:[^;]+(?=;)|^color:[^;]+; 

Вы увидите, что он обрабатывает по-разному случай, когда цвет является первым параметром.

var style = "cursor: pointer;background-color: yellow;color: lightgray;"; 
var replaced = style.replace(/[\s;]color:[^;]+(?=;)|^color:[^;]+;/g, '') 

Обратите внимание, что даже при использовании регулярных выражений не так уж плохо здесь, эта операция может быть сделана с большей уверенностью с простым расщеплением + фильтрацией:

var replaced = style.split(';').filter(function(v){ 
    return v.split(':')[0].trim()!='color' 
}).join(';'); 
+0

Это плохая новость, если цвет не является первым или последним элементом (так как он удалит как верхнюю, так и конечную точку с запятой). –

+0

@ F.J Исправлено. –

+0

Я уверен, что более короткое регулярное выражение можно найти, но давайте, почему 2 downvotes? –

0

Немного обновления на решении ,

dystroy, solution только имеет одну маленькую проблему, связанную с backgroud-image с базой64 ввода. Просто хотел бы добавить регулярное выражение для разделения стиля

arr = s.match(/background-image\s*:\s*url\s*\(\s*data:image[^)]+\)?|[a-zA-Z-]+:[^;]+/gi); 

Это должно дать вам массив, содержащий все элементы. Пока это работает.