墨塗

作成日:1999-04-29
最終更新日:

正規表現に挑戦してみました。

やりたいことというのは日本語を置き換えてみるというものです。 今までに正規表現を使わないやり方では、各種のアイディアがあります。 たとえば、標準語を各地の方言に置き換えるというアイディアがあり、JavaScript でいくつか実現しています。 方言ならば、一対一の対応でいいのでしょうが、ちょっと別のことをしたくなりました。
というのは、ある文章があって、そのキーワードを覚えたい、ということです。 よくこういうときは、キーワードを紙に赤い字で書いておいて、赤い下敷きをすかしてその紙を見て 覚える、なんてことをしますね。これをコンピュータでやってみようと考えたのです。
ある先輩から、こういう示唆をいただきました。
ブラウザで、特定のキーワードを背景と同じ色で書いておく。キーワードを見たい時は、該当部分をドラッグしたり、 文全体を選択したりすれば見える、というものです。
なるほど、これは簡単で面白い。
しかし、わたしは別の方法をとってみました。キーワードの色を替えずに済ませる方法です。
キーワードは何にするか、ということを考えた結果、漢字であらわされていることば、としてみました。 すかして隠した文を、ここでは便宜上墨塗文と呼びます。 長さがわかるように、そして処理が簡単になるように、一文字に一伏せ字とします。

例:原文が「変革を迫られる中小企業と起業家精神の発揮」
とあれば、覚えるための墨塗文は
「**を*られる****と*****の**」
となります。

perlではできたことを確認しました。JavaScriptでも1.2になってから正規表現が取り入れられたので、 日本語ができるかどうかやってみました。次のスクリプトです。

var org="変革を迫られる中小企業と起業家精神の発揮";
var result=org.replace(/[亜-瑶]/g, "*");
document.write(result);

[亜-瑶]というのが目を引きます。これはperlにおける昔の一文字漢字表現です。 さて、うまくいくでしょうか。

まず、Macintosh上での確認です。
ふだん使っているNetscape Communicator 4.04[ja]でやってみたところ、 ブラウザが瞬時に落ちました。 「タイプ2のエラーが起きました」ということでした。

次に、めったに使わないInternet Explorer 4.01 でやってみたところ、次の文字列があらわれました。

*革を迫られる中***と起**精神の発*

どうも漢字を表す正規表現はperlとは違うようです。がっかりしました。


付記:Macintosh の Netscape Communicator 4.5 では落ちなくなりました。 ただし、文字列は

*革を迫られる中***と起**精神の発*

であり、同じです。(1999 8/14)


付記2:後で気付いたのですが、現在の主流ブラウザ(Netscape, Internet Explorer)は文字を Unicode の形で もっています。Unicode の文字体系はよく知りませんが、漢字の配列は JIS とは違い、 部首別になっているのではないかと勘ぐりました。それならば、漢字の先頭は「一」であるべきです。 漢字の末尾はよくわからないので、取りあえず「龍」をあてました。その結果、漢字一文字を表す表現を変えて、

var result=org.replace(/[一-龍]/g, "*");

としてみました。
結果はもくろみ通り、
「**を*られる****と*****の**」
となりました。Macintoshでは、Netscape Communicator(4.5)と、 Internet Explorer(4.0)で確認しました。
しかし、MacintoshのNetscape Communicator(4.03) や、Windows 95のNetscape Communicator(4.05)ではエラーが出ます。 どうぞ、次の欄でお楽しみ下さい。墨塗元の文字の欄に漢字混じりの文を書き、 「墨塗」ボタンをクリックすると、墨塗後の文字の欄に墨塗文が表示されます。(1999-08-27)

墨塗元の文字:
墨塗後の文字:

まりんきょ学問所JavaScript 手習い > 墨塗


MARUYAMA Satosi