前回、VimScriptでHTML処理を作りました。
今回はJavaScriptで同様の処理を作成してみました。 Vimで出来るようになったので作成しなくても良かったのですが、練習がてら挑戦してみました。
上のテキストエリアに変換対象の文字を入れて「変換」ボタンを押すと、 下のテキストエリアに変換後の文字が出力されます。
変換
HTML
テキストエリア2つと、ボタンを1つ用意します。
テキストエリアには、それぞれnoescape
、escape
というidを付与します。
ボタンはesc
というidを付与します。どんな要素でも良いのですが、今回はinput
を使っています。
<textarea id="noescape" rows="20" cols="60"></textarea>
<textarea id="escape" rows="20" cols="60"></textarea>
<input type="button" id="esc" value="変換">
変換対象文字の設定
コンストラクタ内でJavaScriptで変換対象の文字を指定します。
VimScriptの時と同様、&
には"否定先読み"を使います。JavaScriptでは(?!~)
という形で指定します。
this.replaceEntity = [
['(&(?!#*\\w+;)|&|&)', '&'], // アンパサンド
['(\\"|"|")', '"'], // ダブルクォーテーション
['(\\\'|')', '''], // クォーテーション
['(<|<|<)', '<'], // 小なり
['(>|>|>)', '>'], // 大なり
];
イベント追加
ボタンにイベントを追加します。
変換対象文字指定と同じように、コンストラクタ内で指定します。
this.bindEvent('esc');
そして、bindEvent
では、addEventListener
を使ってイベントを指定します。
bindEvent(id) {
document.getElementById(id).addEventListener('click', this.htmlEscape, false);
}
変換処理
ようやく文字の変換処理です。
変換は単純に#noescape
のテキストエリア内のデータを取得し、変換処理した結果を#escape
に代入するという方法です。
変換処理はぐちゃぐちゃで使った処理を流用しました。
replaceHexSpChar(string) {
let regExp = new Object();
for (const k of Object.keys(this.replaceEntity)) {
regExp = new RegExp(this.replaceEntity[k][0], 'ig');
string = string.replace(regExp, this.replaceEntity[k][1]);
}
return string;
}
最後にtextReplace()
呼び出せば完了です。
let rep = new textReplace();
今回説明で利用したソースはこちらにあります。