漢字の墨塗

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

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

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

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

perl では上記が実現できた。JavaScriptでも1.2になってから正規表現が取り入れられたので、 日本語ができるかどうかやってみた。次のスクリプトだ。

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

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

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

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

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

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


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

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

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


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

let 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)

墨塗元の文字:

墨塗後の文字:

付記3 現在の漢字一文字

https://stabucky.com/wp/archives/7594 を見ると、[一-龠]や、[\u4E00-\u9FFF]が詳解されている。 ここでは、[一-龠]を用いている(2020-03-25)。

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


MARUYAMA Satosi