これは猛烈に凄い事です。
JavaScriptすらも超える手軽さと言えば、もちろんシェルスクリプトがあるわけですが、どうしても独自文法にならざるを得ないのが泣き所でした。
node.jsがあれば「あっ、こういう小さなツール欲しいな」と思ったら、ぱぱっとJavaScriptで組めてしまえる。
というわけで、簡単に正規表現パターンを試せるコンソールアプリ(ツール)が欲しくなったので作ってみました。
■仕様
- コンソール(PowerShell)で実行します。
- コマンドは以下になります。
- node.exe Regex.js 'パターン' '検査したい文字列'
- 結果がヒットした時はヒット内容を全て表示します。
- 結果がヒットしなかった時はその旨通知し終了。
■コード
/**
* @fileoverview 指定パターンと文字列で正規表現マッチを簡単検査
* @param {string} process.argv[0] node.exe(システム)
* @param {string} process.argv[1] 当該PG名(システム)
* @param {string} process.argv[2] 正規表現パターン
* @param {string} process.argv[3] 検査したい文字列
*/
/**
* ルート処理
*/
try{
let aParam = new Array();
if(process.argv.length !=4) {
console.log("パラメータは、「正規表現 値」で入力して下さい。");
process.exit(1);
} else {
aParam[0] = new String(process.argv[2]);
aParam[1] = new String(process.argv[3]); //値
}
proc1(aParam);
} catch(e) {
procE(e,"root");
}
process.exit(0);
/**
* メイン処理(正規表現パターンの検査)
* @param {array} aParam [0]=正規表現パターン [1]=検査したい文字列
*/
function proc1(aParam) {
try{
let oRegex = new RegExp(aParam[0],"gi");
console.log(aParam[0]);
let aRes = aParam[1].match(oRegex);
if(aRes === void 0 ||
aRes === null) {
console.log("パターンはマッチしませんでした。");
} else {
console.log("パターンは (" + aRes.length + "箇所) マッチしました!");
let i=1;
//@@@@@@@@@@[LOOP-START]@@@@@@@@@@
aRes.forEach(element => {
console.log("[" + i + "] " + "[" + element + "]");
i++;
});
//@@@@@@@@@@[LOOP-END ]@@@@@@@@@@
}
}catch(e) {
procE(e,proc1.name);
}
}
/**
* エラー処理
* @param {object} e
* @param {string} sName
*/
function procE(e,sName) {
try{
console.log("[" + sName + "でエラー発生]" + e.name + "(" + e.message + ")");
process.exit(1);
}catch(e){
console.log("エラー処理失敗" + e.name + "(" + e.message + ")");
}
}
しかも、Visual Studio Code(VS Code)がまたJavaScriptとの相性も良くて、うきうきです。
ちなみに、コメントはJSDOC形式に近づけて書いてみました。
ただし私がどうしても入れたくてやってる、ループの開始と終了の時のマーカーはJSDOCとして認識して欲しくないので従来方式です。
ちなみに、node.jsのコマンドパラメータから直接正規表現パターンを入力してもらうわけですが、この時、¥w+などのエスケープシーケンス文字ってどうするの?という問題があり、少し嵌ってしまいました。
結論を言うと、「¥w+」などとエスケープシーケンス文字入りパターンを入力すると、システムが自動で[string:¥¥w+]などとエスケープしてくれるのです。
だから、入力時には普通にパターンを指定します。
プログラムでもあえて¥を¥¥に変換する処理は入れないです。
逆に、コマンドパラメータに¥¥w+などと入力すると、システムが[string:¥¥¥¥w+]に自動変換してしまうのでパターンが永遠にマッチしなくなります。
↑
node.exe c:¥Temp¥Regex.js '¥w+' 'Playstation Vita is the best game machine. Of course.'
マッチしない時はその旨を通知して終了します。
ちなみに、ASUS E203MAでもって、冷気こもる部屋でキーボード叩いてたんですが、手が凍りそうでうまく動かない。
キーボードに指が跳ね返されて入力できない・・・。
また低発熱で無音のPCなので、冬はずっと冷えたままのボディなんですよね。