RegExp搜索并替换css中的图像路径

时间:2015-10-07 09:47:26

标签: css regex

有必要在css文件中执行搜索和替换字符串。并且只找到了标题图片。

除了

之外,搜索已完成
/:(\s*)url\(((.(?!.*https:|.*http:|.*base64|.*data:image))*)\)/ig

并替换

:$1url(\'../dist/img/vendor/$2\')

在这种情况下,我以类似的方式替换路径。我得到了这个结果

background-image: url('../dist/img/vendor/"../images/preloader.gif"');

需要字符串

background-image: url("../images/preloader.gif");

获取

background-image: url('../dist/img/vendor/preloader.gif');

2 个答案:

答案 0 :(得分:0)

查找

/(url\(\s*[\"\'])(?:[^\"\']+\/)?([^\/\"\']+[\"\']\s*\))/ig

替换

$1../dist/img/vendor/$2

演示https://regex101.com/r/kU7cC9/3

答案 1 :(得分:0)

使用css解析器是一种更好的方法,如果你想要避免引用问题(单引号,双引号,没有引号)。

另外,background-image CSS属性不是唯一可以包含图像文件路径的属性,因为background属性可以编译来自其他background-的所有数据。 1}}属性。

sabberworm PHP CSS Parser自动包含双引号之间路径的示例:

require __DIR__ . '/vendor/autoload.php';

define('NEW_PATH', '../dist/img/vendor/');

$oCssParser = new Sabberworm\CSS\Parser($css);
$oCssDocument = $oCssParser->parse();

$properties = ['background-image', 'background'];

foreach($oCssDocument->getAllRuleSets() as $oRuleSet) {
    foreach($properties as $property) {
        $oCssRules = $oRuleSet->getRules($property);

        foreach ($oCssRules as $oCssRule) {
            $value = $oCssRule->getValue()->__toString();

            if (!preg_match('~https?:|base64|data:image~S', $value)) {
                $value = preg_replace('~url\("\K(?:[^"/]*/)*~', NEW_PATH, $value);
                $oCssRule->setValue($value);
            }
        }
    }
}

echo $oCssDocument->render(Sabberworm\CSS\OutputFormat::createPretty());