Эффективное регулярное выражение для принудительного использования одного пробела после значения атрибута CSS - PullRequest
2 голосов
/ 17 октября 2011

Поскольку я часто работаю в Dreamweaver для основной работы с CSS ... Завершение кода DW имеет тенденцию добавлять значения атрибутов CSS непосредственно после двоеточия без пробелов ... {attr: value}. Поскольку это вызвало некоторые настоящие проблемы с отладкой из-за проблем с отображением в требовательных браузерах, мне часто приходится вручную добавлять пробел после двоеточия. [^ D.R.Y.]

В настоящее время я работаю над созданием простого фрагмента регулярного выражения, который я могу запустить для правильного форматирования CSS ...

То, что у меня сейчас есть, похоже, работает, но я думаю, что это немного грубо ... Я просто пытаюсь понять, есть ли какие-либо предложения ... Вот что у меня есть ...

(.*?(?={).*?:)([^\s][\w!#$%&'*+/=?^_`{|}~-]*.*?;}) 

И замена строки на ...

 \s$2 

► Разъяснение ► Ниже я несколько улучшил решение выше ... Я все еще думаю, что оно требует уточнения, хотя ...

(?:(?={*))(?:\s*?)([\s\r\n]*?\b[\w!#$%&'*+/=?^_`|~-]*:(?!.*{))(?!\s)(.*?;) 

И замена на ...

$1 $2

► Версия Perl ►

Perl делает очень легкую работу над этим ...

perl -pi -e 's/^(.*?:)([^\s].*?;).*$/$1 $2/ig'

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Если вы запустите свой фрагмент регулярного выражения в программе на C #, у меня есть решение для вас:

Regex regex = new Regex(@"(?<=\{{1}[\s\r\n]*)((?<Attribute>[^}:\n\r\s]+):\s+(?<Value>[^;]*);[\s\r\n]*)*(?=\})");

regex.Replace(input, match =>
{
    var replacement = string.Empty;
    for (var i = 0; i < match.Groups["Attribute"].Captures.Count; i++)
    {
        replacement += string.Format(CultureInfo.InvariantCulture, "{0}: {1}\r\n", match.Groups["Attibute"].Captures[i], match.Groups["Value"].Captures[i]);
    }
    return replacement;
});
0 голосов
/ 17 октября 2011

Если я правильно вас понимаю, это должно работать (JavaScript)

'{attr:value}'.replace(/({.*?:)\s*/g,'$1 ')

Это дает '{attr: value}' в качестве вывода.

...