正規表現に挑戦してみた。
やりたいことというのは日本語を置き換えてみるというものだ。
今までに正規表現を使わないやり方では、各種のアイディアがある。
たとえば、標準語を各地の方言に置き換えるというアイディアがあり、
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)
墨塗元の文字:
墨塗後の文字:
https://stabucky.com/wp/archives/7594 を見ると、[一-龠]や、[\u4E00-\u9FFF]が詳解されている。 ここでは、[一-龠]を用いている(2020-03-25)。
まりんきょ学問所 > JavaScript 手習い > 漢字の墨塗