« 2007年06月 | メイン | 2007年08月 »

2007年07月31日

sed sed sed

 特定の文字列を抜き出す

 sedの置換では置換条件で「(...)」にくくった文字列を置き換え文字として利用できる。その際,始めに現われた(...)が「\1」,次に現われた(...)が「\2」に代入される。

 たとえば,拡張子部分(ドットより後の文字列)を抜き出したい場合は,

$ file_name="linux.txt"
$ echo $file_name | sed -e "s/.*\.\([^.]*\)\$/\1/g"
txt


とする。この場合はドットから末尾までの文字列でその中にドットが入っていない文字列を抜き出し,文字列全体と抜き出した文字列を置換している。

. 改行文字以外の任意の1文字
* 直前の1文字の0回以上の繰り返しに一致。直前の文字は正規表現でも構わない
^ 行の先頭
$ 行の末尾
[ ] かっこ内の任意の1文字に一致。ハイフン(-)で範囲指定もできる
[^ ] かっこ内の任意の1文字に不一致。ハイフン(-)で範囲指定もできる
\+ 直前の文字の1個以上の繰り返しに一致
\? 直前の文字の0または1文字に一致
\{n\} 直前の文字のn個の繰り返しに一致
\{n,\} 直前の文字のn個以上の繰り返しに一致
\{,m\} 直前の文字のm個以下の繰り返しに一致
\{n,m\} 直前の文字のn個以上,m個以下の繰り返しに一致
パターン1\|パターン2 パターン1またはパターン2のいずれかに一致
\(パターン\) パターンをグループ化する。マッチした内容は\1や\2として利用できる
\ 正規表現に使われる記号を普通の文字として扱う

投稿者 muuming : 09:39 | コメント (0)

2007年07月27日

ブラウザごとに振り分け


【対応状況】

document.all … IE4 ~
document.getElementById … IE5 ~、NN6 ~
document.layers … NN4
document.images … IE4 ~、NN3 ~

上記の対応状況を使って、次の例のように細かく振分けることもできます。


■IEのみ
if(document.all){
// IEのみの処理
}

■IE4のみ
if(document.all && !document.getElementById){
// IE4のみの処理
}

■IE5以上のみ
if(document.all && document.getElementById){
// IE5以上のみの処理
}

■NN4のみ
if(document.layers){
// NN4のみの処理
}

■NN6以上のみ
if(!document.all && document.getElementById){
// NN6以上のみの処理
}

■IE4以上とNN6以上のみ
if(document.all || document.getElementById){
// IE5以上とNN6以上のみの処理
}

■IE5以上とNN6以上のみ
if(document.getElementById){
// IE5以上とNN6以上のみの処理
}

■IE4以上とNN3以上のみ
if(document.images){
// IE4以上とNN3以上のみの処理
}

投稿者 muuming : 11:56 | コメント (0)

2007年07月26日

undefined対策

if (navigator.cookieEnabled) alert("クッキーが有効です。");
else alert("クッキーが無効です。");

などと書くと、navigator.cookieEnabled というプロパティを知らないブラウザではすべて「クッキーが無効です。」と表示されてしまうでしょう。これは、

if (!navigator.cookieEnabled) alert("クッキーが無効です。");

と書いた場合にも同じ問題を引き起こします。ですからこのような問題が予想されるケースでは、

if (navigator.cookieEnabled != undefined) {// 値が undefined でなければ
if (navigator.cookieEnabled) alert("クッキーが有効です。");
else alert("クッキーが無効です。");
}

投稿者 muuming : 16:00 | コメント (0)

数字?

num = prompt("数字を入れて下さい。","");
// 入力を求めるダイアログを表示し、入力結果を変数 num に入れる
flag = isNaN(num);
// num が数値でなければ true、数値であれば false を変数 flag に代入
if (flag) alert(num + "は数字ではありません!");
// これは if (flag == true) alert("どうも!"); と同じ
else alert("どうも!");

投稿者 muuming : 15:58 | コメント (0)

オブジェクト

* オブジェクトには document、window、文字列オブジェクトの場合などのように、そのままで使えるオブジェクトもありますが、 日付オブジェクトやイメージオブジェクトのように、あらかじめスクリプトの中でオブジェクトの生成を宣言しなければエラーになるもの、 event オブジェクトのようにイベントとの関連づけを定義する必要のあるものなど様々です。(これからおいおい触れていきます。)
* 関数の場合と同じく、オブジェクトもユーザーが作ることが出来ます。その手順は次の通りです。
(1)適当な名前の関数を作り、その中でプロパティやメソッドを定義します。

function Umechando( ) {
this.name = "梅ちゃん堂"; // name プロパティ
this.mail = "support@umechando.com"; // mail プロパティ
this.URL = "http://www.umechando.com/"; // URL プロパティ

this.log_in = function ( ) { // log_in( ) メソッドを定義する
window.open(this.URL, "Umechando", "");
}
}
(2)これをオブジェクトとして生成します。
theSite = new Umechando( );
(3)以下のように使用できます。







* 或るオブジェクトの定義内容を知りたい場合、次の方法で一覧表示させることが出来ます。
for ( i in オブジェクト名) document.write ( i + "= " + オブジェクト名[ i ] );

for ( i in document) document.write ( i + "= " + document[ i ] );

オブジェクトの定義内容はブラウザやそのバージョンによって多少異なります。

投稿者 muuming : 15:10 | コメント (0)

変数宣言

abc ="alphabet";

のように var を冠しない場合と、

var abc ="alphabet";

のように var を冠する場合とがあります。或る関数の中で変数を宣言した場合、var を冠して宣言したものは「ローカル変数」(その関数の中でのみ有効な変数)となります。 それ以外の場合は(var があってもなくても)グローバル変数(プログラム全体で有効な変数)となるようです。

投稿者 muuming : 15:06 | コメント (0)

メモ1 返り値

flag = isNaN(document.forms[0].elements[0].value);

これは、ウェブページ内の最初のフォームの最初のエレメントの値が数値なら真(true)を、数値でなければ偽(false)を返し、 変数 flag に代入するという処理です。もし document.forms[0].elements[0].value が数値だったら flag には "false" という値が入ります。

投稿者 muuming : 15:05 | コメント (0)