墨塗 |
作成日: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 手習い > 墨塗