Skyward Design

Blog Webクリエイターの日々の覚え書き

ホーム > Blog > Web制作 > 文字列を置換するカスタムSass関数を作ってみた

文字列を置換するカスタムSass関数を作ってみた

Posted by Hideki at 2012年1月25日 20:54

タグ:

昨日の「Ruby初心者だけどゼロパディングするカスタムSassファンクションを作ってみた」に引き続き、文字列を置換するカスタムSass関数(custom Sass functions)を作ってみました。以前ヨモツネット@yomotsuさんが「SVG GradientをSASS(LESS)で生成してCSS Gradientとして扱うmixin」の中で「SASSで文字列のreplaceができればいいのですが...。」と書かれていたので、需要があるかなと思った次第です。

  • "custom Sass functions"を昨日は「カスタムSassファンクション」と訳したのですが、今日からは「カスタムSass関数」と訳すことにします。「カスタムSass関数」の方が分かりやすく、しっくりくる気がするので...。

関数のコード

require "sass"

module SkywardDesignFunctions
    def str_replace(search_cond, replace_str, str)
        assert_type search_cond, :String
        assert_type replace_str, :String
        assert_type str, :String

        if (/\/.+\// =~ search_cond.value) then
            search_cond.value.gsub!(/\//, "")
            retVal = str.value.gsub(/#{search_cond.value}/, replace_str.value)
        else
            retVal = str.value.sub(search_cond.value, replace_str.value)
        end

        Sass::Script::String.new(retVal)
    end
end

module Sass::Script::Functions
    include SkywardDesignFunctions
end

仕様

下記のように引数を指定して呼び出します。

str-replace("検索文字列", "置換文字列", "検索・置換対象文字列")

最初にマッチした文字のみ置換

// 呼び出し
str-replace("o", "+", "Hello World")

// 結果
Hell+ World

正規表現で置換

検索文字列を「/」で挟むと、正規表現で指定したものとして扱います。

// 呼び出し
str-replace("/o/", "+", "Hello World")

// 結果
Hell+ W+rld

使用方法

昨日のゼロパディング関数と同じですが、再掲します。

  1. 上記コードを任意のディレクトリに任意の名前で保存するか、GitHubからダウンロードします(例:skyward_design.rb)。
  2. 置換したい場面でstr-replace("検索文字列", "置換文字列", "検索・置換対象文字列")と記述します。例えば次のようなコードです。
    $tmp: "";
    .sample:after{
    	$tmp: str-replace("o", "+", "Hello World");
    	content: "#{$tmp}";
    }
    
  3. 次のように-rオプションでカスタムSass関数のファイルを指定してコンパイルします。
    sass sample.scss sample.css -r skyward_design.rb

Compassを使っている場合

Compassを使っている場合はconfig.rbに次のコードを追加します。コンパイルのコマンドはcompass watch(compass compile)でOKです。

require "./skyward_design.rb"

ダウンロード

昨日のzeropadding関数と今日のstr-replace関数をまとめたモジュールをGitHubに置きましたのでご利用下さい。

  • 今後仕様が変更になる可能性があることを予めご了承下さい。

このページは役に立ちましたか?

ご意見があればご入力下さい。

コメント

現在この記事へのコメントはありません。

コメント投稿フォーム

トラックバック

トラックバックURL:
http://www.skyward-design.net/mt5/mt-tb.cgi/124

著者紹介

独学でWeb制作を学んだ後、2007年より西新宿のWeb制作会社に勤務。2011年からは広島にUターンし、マイペースで働きつつWeb制作の勉強をしているフロントエンド・エンジニアです。

Feed

Valid XHTML + RDFa

Copyright © 2011 Skyward Design All Rights Reserved.

Powered by Movable Type 5.13-ja