webAi.JpSntnc - ソースコード
説明
「Web AI」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。「Web AI」を使うと、Web上からデータを取得して構築するWebページを、とても簡単に構築することができます。
「Web AI」は、Webからの検索結果やフィードの取得、短縮URLへのURLの変換、日本語文章からのキーワードや文章抽出、日本語文章のマルコフ連鎖、クエリーの管理などの機能を備えています。
このページでは、この「Web AI」のファイルの1つである「crocro.webAi.JpSntnc.js」のソースコードを掲載します。
「crocro.webAi.JpSntnc.js」
「crocro.webAi.JpSntnc.js」には、日本語の文字列から、使えそうな文章を抽出する機能がまとめられています。このファイルには「crocro.webAi.JpSntnc」オブジェクトが収録されています。
「crocro.webAi.JpSntnc」オブジェクトは、検索結果のような雑多な文章から、ある程度文体を揃えた文章を作成する校正機能を持っています。この校正機能は簡易的なものです。校正機能を利用せずに文章の抽出だけを行うこともできます。
使い方は、「Web AI」の各サンプルを参考にしてください。
ソースコード
以下、「crocro.webAi.JpSntnc.js」のソースコードです。
// crocro.webAiの初期化 if (! crocro) var crocro = {}; if (! crocro.webAi) crocro.webAi = {}; /** * @variable crocro.webAi.JpSntnc(arg) * @title 日本語センテンス * @description * * Webから取得した雑多な日本語から、有効なセンテンスを抽出するオブジェクト。 * newで初期化してから利用する。 */ crocro.webAi.JpSntnc = function() { // 内部利用変数 this.srcStr = ""; // 文章文字列 /* *-------------------------------------------------- */ /** * @variable JpSntnc.reset() * @title 文章のリセット * @description * * 文章をリセットする。 * * @return なし */ this.reset = function() { this.srcStr = ""; } /** * @variable JpSntnc.addSntnc(src) * @title 文章の追加 * @description * * 文章を追加する。 * * @param src 文字列、もしくは文字列配列。 * @return なし。 */ this.addSntnc = function(src) { // 引数から、元文字列を作成 var srcStr = ""; if (src) { if (src instanceof Array) { srcStr += src.join("。"); } else { srcStr += src; } } // 文字列を追加 this.srcStr += srcStr; }; /** * @variable JpSntnc.getSntncArr(arg) * @title 抽出文章配列の取得 * @description * * 内部にためた文章から、文章の配列を抽出して戻す。 * * @param arg.usePrfrd 校正の使用の有無(true/false)。 * @return 文章の配列。 */ this.getSntncArr = function(arg) { // 引数の展開 var usePrfrd = true; if (arg) { if ("usePrfrd" in arg) usePrfrd = arg.usePrfrd; } // 内部にためた文章から、文章の配列を抽出 return this.mkSntncArr(this.srcStr, {usePrfrd: usePrfrd}); }; /* *-------------------------------------------------- */ /** * @variable JpSntnc.mkSntncArr(src, arg) * @title 文章の抽出 * @description * * 引数の文字列、もしくは配列から、文章の配列を抽出して戻す。 * * @param src 文字列、もしくは文字列配列。 * @param arg.usePrfrd 校正の使用の有無(true/false)。デフォルトはtrue。 * @return 文章の配列。 */ this.mkSntncArr = function(src, arg) { // 引数の展開 var usePrfrd = true; if (arg) { if ("usePrfrd" in arg) usePrfrd = arg.usePrfrd; } // 引数から、元文字列を作成 var srcStr = ""; if (src) { if (src instanceof Array) { srcStr += src.join("。"); } else { srcStr += src; } } // 変数の初期化 var resArr = []; var resHsh = []; /* *-------------------------------------------------- */ // タグの除去 srcStr = srcStr.replace(/<.+?>/g, ""); // 前駆処理 srcStr = srcStr.replace(/<[^>]+>/g, ""); srcStr = srcStr.replace(/Yahoo!/gi, "Yahoo"); // 特殊 srcStr = srcStr.replace(/([^\.])\. /g, "。"); // ピリオド+スペース srcStr = srcStr.replace(/[!?!\?|\](;,/\\/。::;;…→↑←↓〓)/g, "。"); // 文末記号 srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー、]) +([0-zぁ-ヶ一-龠ー、])/g, ""); // 分割の復元 //alert("100 : " + srcStr); srcStr = srcStr.replace(/([\W])([^0-zぁ-ヶ一-龠ー、]) /g, "。"); // 文末判定 srcStr = srcStr.replace(/[・・]{2,}/g, "。"); // 省略記号文末 srcStr = srcStr.replace(/\.+/g, "。"); // 省略記号文末 srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[・\.]+/g, "。"); // 日本語文末 srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[wWwW]+ /g, "。"); // 笑い文末 srcStr = srcStr.replace(/([^0-zぁ-ヶ一-龠ー\w])+ /g, "。"); // 顔文字 //alert("200 : " + srcStr); srcStr = srcStr.replace(/[“”]/g, ""); // 括弧 srcStr = srcStr.replace(/[「『」』]/g, "。"); // 括弧 srcStr = srcStr.replace(/[【[\[\]]】]/g, "、"); // 括弧 //alert("300 : " + srcStr); srcStr = srcStr.replace(/(\w+:)+\w+/g, ""); // 2chなどのID srcStr = srcStr.replace(/[^0-zぁ-ヶ一-龠ー、。\w ]+\w+[^0-zぁ-ヶ一-龠ー、。\w ]/g, ""); // 「#00;」などの文字列 srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])。(は|が)/g, ""); // 分割の復元 srcStr = srcStr.replace(/(^|。) +| +(。|$)/g, "。"); // トリム //alert("400 : " + srcStr); srcStr = srcStr.replace(/。、/g ,"。"); srcStr = srcStr.replace(/。{2,}/g ,"。"); var newArr = srcStr.split("。"); /* *-------------------------------------------------- */ // 格納 for (var i = 0; i < newArr.length; i ++) { // 飛ばし条件 var tgtStr = newArr[i]; if (tgtStr.length <= 10) continue; // 削り tgtStr = tgtStr.replace(/[^0-zぁ-ヶ一-龠ー\w、。]+/g, ""); tgtStr = tgtStr.replace(/%/g, "%"); // 飛ばし条件 if (tgtStr.length <= 10) continue; if (! tgtStr.match(/[にをはのでがも]/)) continue; if (tgtStr.indexOf("http") >= 0) continue; if (tgtStr.match(/[0-9]$/)) continue; if (tgtStr.match(/^[にをはのでがも]/)) continue; if (tgtStr.match(/書きかけ項目/)) continue; if (tgtStr.match(/当(社|店)/)) continue; // 括弧の対応 if (tgtStr.split("(").length != tgtStr.split(")").length) continue; if (tgtStr.split("(").length != tgtStr.split(")").length) continue; // 校正 if (usePrfrd) tgtStr = this.prfrdStr(tgtStr); // 格納 resHsh[tgtStr] = 1; } /* *-------------------------------------------------- */ // ユニークにして配列化 for (var key in resHsh){ resArr.push(key); } // 長い順にソート resArr = this.sortLong(resArr); return resArr; } /* *-------------------------------------------------- */ /** * @variable JpSntnc.sortLong(srcArr) * @title 長い順にソート * @description * * 長い順にソートを行う。 * 元の配列はソートされない。 * * @param srcArr 文字列配列。 * @return ソート後の配列。 */ this.sortLong = function(srcArr) { resArr = srcArr.concat().sort(function(a, b) { return (b.length > a.length) ? 1 : -1; }); return resArr; } /** * @variable JpSntnc.sortLen(srcArr, tgtLen) * @title 指定文字列長でソート * @description * * 指定文字列に近いものから順番にソートを行う。 * 元の配列を複製してから使用するので、元の配列はソートされない。 * * @param srcArr 文字列配列。 * @param tgtLen 対象文字列長。 * @return ソート後の配列。 */ this.sortLen = function(srcArr, tgtLen) { resArr = srcArr.concat().sort(function(a, b) { var aDif = a.length - tgtLen; aDif *= aDif; var bDif = b.length - tgtLen; bDif *= bDif; return (aDif > bDif) ? 1 : -1; }); return resArr; } /* *-------------------------------------------------- */ /** * @variable JpSntnc.prfrdStr(srcStr) * @title 文章の校正 * @description * * 文章を校正して戻す。 * * @param srcStr 文字列。 * @return 校正した文章 */ this.prfrdStr = function(srcStr) { if (srcStr == "") return ""; var resStr = srcStr; for (var i = 0; i < this.prfrdArr.length - 1; i += 2) { resStr = resStr.replace(this.prfrdArr[i], this.prfrdArr[i + 1]); } return resStr; } /* *-------------------------------------------------- */ /* * 【文章校正用変数】 */ // 文字列 var lcKn = "[一-龠]"; var lcGkn = "[一-龠ァ-ヶ・ー々]"; // 語幹(漢字、片仮名) var lcHr = "[ぁ-ん]"; var lcKnHr = "[一-龠ぁ-んー]"; var lcKnKt = "[一-龠ァ-ヶ・ー]"; var lcJp = "[一-龠ぁ-んァ-ヶ・ー々]"; var lcBoA = "[あかがさざただなはばまやらわ]"; var lcBoI = "[いきぎしじちぢにひびみり]"; var lcBoU = "[うくぐすずつづぬふぶむゆる]"; var lcBoE = "[えけげせぜてでねへべめれ]"; var lcBoO = "[おこごそぞとどのほぼもよろ]"; var lcSiS = "[さしすせそ]"; var lcSiT = "[たちつてと]"; var lcEnNo = "[a-zA-Z0-9a-zA-Z0-9]"; var lcJs = "(?:て|に|を|は|か|が|の|も|では)"; var lcNotJs = "(?:(?!て|に|を|は|か|が|の|も|では).)"; var lcShg = "俺"; // 主語 var lc2sh = "お前ら"; // 二人称 // 変換 var lcTHsh = { "た":0, "ち":1, "つ":2, "て":3, "と":4, 0:"た", 1:"ち", 2:"つ", 3:"て", 4:"と"}; var lcDHsh = { "だ":0, "ぢ":1, "づ":2, "で":3, "ど":4, 0:"だ", 1:"ぢ", 2:"づ", 3:"で", 4:"ど"}; var lcKHsh = { "か":0, "き":1, "く":2, "け":3, "こ":4, "い":5, 0:"か", 1:"き", 2:"く", 3:"け", 4:"こ", 5:"い"}; var lcWHsh = { "わ":0, "き":1, "く":2, "け":3, "こ":4, "い":5, 0:"わ", 1:"い", 2:"う", 3:"え", 4:"お", 5:"っ"}; // ~てい"ます" → ~てい"る" var lcMasuHsh = { "ます": "る", "ましょう": "るだろう", "ました": "た", "ません": "ない"}; var lcMasuHsh2 = { "ます": "る", "ましょう": "よう", "ました": "た", "ません": "ない"}; var lcMasuHsh3 = { "ます": {a:"ある" ,o:"いる" ,s:"す" ,s2:"する" ,t:"つ" ,n:"ぬ" ,m:"む" ,r:"る" ,k:"くる" ,k2:"く" ,k3:"く" ,i:"う" ,b:"ぶ" }, "ましょう": {a:"あるだろう" ,o:"いるだろう" ,s:"そう" ,s2:"しよう" ,t:"とう" ,n:"のう" ,m:"もう" ,r:"ろう" ,k:"こよう" ,k2:"こう" ,k3:"こう" ,i:"おう" ,b:"ぼう" }, "ました": {a:"あった" ,o:"いた" ,s:"した" ,s2:"した" ,t:"った" ,n:"んだ" ,m:"んだ" ,r:"った" ,k:"きた" ,k2:"いた" ,k3:"った" ,i:"った" ,b:"んだ" }, "ません": {a:"ない" ,o:"いない" ,s:"さない" ,s2:"しない" ,t:"たない" ,n:"なない" ,m:"まない" ,r:"らない" ,k:"こない" ,k2:"かない" ,k3:"かない" ,i:"わない" ,b:"ばない"}}; function hshMasu(strBarLst, strKey) { var arr = strBarLst.split("|"); if (strKey == "ます") return arr[0]; if (strKey == "ましょう") return arr[1]; if (strKey == "ました") return arr[2]; if (strKey == "ません") return arr[3]; } var lcMasu = mkRegLst(lcMasuHsh); var regArr = [ //============================================================================= // 前駆処理 // 末尾の復旧処理 "つもり$", "つもりである", "(" +lcBoI+ ")ま$", "ます", "しまい$", "しまいます", "(くだ|下)さ$", "ください", "(" +lcBoE+ ")な$", "ない", "(" +lcHr+ ")てい$", "ている", "(" +lcGkn+ ")(?:て|に|を|は|が|の|も|では|とは)$", "だ", "て$", "た", "(?:て|に|を|は|が|の|も|では|とは)$", "", "(" +lcGkn+ ")$", "だ", "、$", "", // 先頭の復旧処理 "^と(" +lcGkn+ "|、)$", "", // 明らかな誤字の復旧処理 "しますた", "しました", "なのれ(" +lcSiS+ ")", "なので", "すいません", "すみません", // 微妙な言い回しの修正 "てま(" +lcSiS+ ")", "ていま", "ってて", "っていて", "(" +lcHr+ ")(ーっ)+", "ー", "(" +lcBoA+ ")(?:ー)+", "あ", "(" +lcBoI+ ")(?:ー)+", "い", "(" +lcBoU+ ")(?:ー)+", "う", "(" +lcBoE+ ")(?:ー)+", "え", "(" +lcBoO+ ")(?:ー)+", "う", " が ", "が ", "(" +lcEnNo+ ") (" +lcHr+ ")", "", //============================================================================= // 敬語の解除 // お願い~ "でお願い(?:いた)*?します", "にして欲しい", "お願いし(て|た)", function(all, ) {return "頼ん" +lcDHsh[lcTHsh[]]}, "お願い(?:いた)*?し" +lcMasu, function(all, ) {return "お願い" +lcMasuHsh3[]["s2"]}, // 有難うございます "(有難う|ありがとう)ございます", "ありがとう", // いたしま~ "(から)いたし" +lcMasu, function(all, , ) {return + "行" +lcMasuHsh3[]["i"]}, // 終了いたします→終了する "いたし" +lcMasu, function(all, ) {return lcMasuHsh3[]["s2"]}, // てい"ます"→てい"る" "てい" +lcMasu, function(all, ) {return "てい" +lcMasuHsh[]}, "てい(る|た|ない)か", "ていのか", // 出来"ます"→でき"る" "(でき|出来)" +lcMasu, function(all, , ) {return "でき" +lcMasuHsh[]}, // ござい"ます"→あ"る" "ござい" +lcMasu, function(all, ) {return lcMasuHsh3[]["a"]}, // てみ"ます"→てみ"る" "てみ" +lcMasu, function(all, ) {return "てみ" +lcMasuHsh2[]}, // ご覧いただけます→見られる "ご覧になりた", "見た", "ご覧(" +lcHr+ "|下)", "見て", // いらして→きて "いらし(" +lcSiT+ ")", "き", //===== // いただく系 // していただくことができ"ます"→でき"る" "していただく", "", "(" +lcHr+ ")ていただく", "ることが", // していただけます→できる "(" +lcGkn+ "|して)いただけ" +lcMasu, function(all, , ) {return + "でき" +lcMasuHsh[]}, "(" +lcGkn+ "|して)いただける", "できる", // ていただけます→ます "(て|で)いただけ(ます|ましょう|ました|ません|る)", "もらえ", // もらえ"ます"→もらえ"る" "(" +lcBoE+ ")" +lcMasu, function(all, , ) {return +lcMasuHsh[]}, // (お)楽しみいただける→(お)楽しみます "(" +lcBoI+ ")いただけます", "ます", "(" +lcBoI+ ")いただけましょう", "ましょう", "(" +lcBoI+ ")いただけました", "ました", "(" +lcBoI+ ")いただけません", "ません", "(" +lcBoI+ ")いただける", "ます", "(" +lcGkn+ ")いただけ(" +lcHr+ ")", "してい", "(" +lcKn+ ")いただ(く)", function(all, , ) {return + "してもら" +lcWHsh[lcKHsh[]]}, "(" +lcKn+ ")いただ(か|き|け|こ|い)(" +lcHr+ ")", function(all, , , ) {return + "してもら" +lcWHsh[lcKHsh[]] +}, "いただ(く)", function(all, ) {"もら" +lcWHsh[lcKHsh[]]}, "いただ(か|き|け|こ|い)(" +lcHr+ ")", function(all, , ) {"もら" +lcWHsh[lcKHsh[]] +}, //===== // あり(あり"ます"→あ"る")、おり(おり"ます"→お"る") "(あ)り" +lcMasu, function(all, , ) {return lcMasuHsh3[]["a"]}, "(お)り" +lcMasu, function(all, , ) {return lcMasuHsh3[]["o"]}, //===== // い音の平仮名「し」系 // 語幹2文字以上 更新しました→する "(" +lcGkn+ "{2,}|" +lcBoI+ ")し" +lcMasu, function(all, , ) {return +lcMasuHsh3[]["s2"]}, // お/知ら/せします→知らせる "お(.+?)せし" +lcMasu, function(all, , ) {return + "せ" +lcMasuHsh2[]}, // お/知ら/せして→知らせて "お(.+?)せして", "せて", //===== // 一漢字orあ音の平仮名+「し」 表します→表す "(" +lcHr+ ")(" +lcKn+ "|" +lcBoA+ ")し" +lcMasu, function(all, , , ) {return + +lcMasuHsh3[]["s"]}, //===== // い音の平仮名「し」以外 // 方言 "(" +lcKn+lcBoE+ ")ちゃ", "ては", "しちゃっ", "し", "しちゃう", "する", // 助詞+います います→いる "(" +lcJs+ ")い" +lcMasu, function(all, , ) {return + "い" +lcMasuHsh2[]}, // ~います 思います→思う "(" +lcNotJs+lcKnHr+ ")い" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["i"]}, // ~きます 行ってきます→行ってくる "(" +lcBoE+ "て|って|んで)き" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["k"]}, // ~きます 聞きます→聞く "(" +lcNotJs+lcKnHr+ ")き" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["k2"]}, // ~きます いきます→いく "(い|行)き" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["k3"]}, // ~ちます(動タ上一→「落|墜|堕|朽|満|充」) 落ちます→落ちる "((?:落|墜|堕|朽|満|充))ち" +lcMasu, function(all, , ) {return + "ち" +lcMasuHsh2[]}, // ~ちます(その他→動タ五) 立ちます→立つ "(" +lcKnHr+ ")ち" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["t"]}, // ~にます 死にます→死ぬ "((?:死|し))に" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["n"]}, // ~びます 遊びます→飛ぶ "んでみ" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["b"]}, // ~みます 「見ます」を加えないように回避 噛みます→噛む "んでみ" +lcMasu, function(all, ) {return lcMasuHsh3[]["m"]}, "(" +lcNotJs+lcKnHr+ ")み" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["m"]}, // 見ます→見る "(" +lcJs+ "|で)(み|見)" +lcMasu, function(all, , , ) {return +lcMasuHsh2[]}, // ~ります 取ります→取る "(" +lcNotJs+lcKnHr+ ")り" +lcMasu, function(all, , ) {return + lcMasuHsh3[]["r"]}, //===== // 一漢字or平仮名+え音の平仮名+し 見せ/ます→見せ/る "(" +lcKnHr+ ")(" +lcBoE+ ")" +lcMasu, function(all, , , ) {return + +lcMasuHsh2[]}, "んでた", "んだ", //===== // 一漢字+まし "(" +lcKn+ ")" +lcMasu, function(all, , ) {return +lcMasuHsh2[]}, //===== // です系 // ないんですけど→ないのだが "ないんです", "ないのだ", "あるのです", "ある", "のですか", "のか", "のです", "のである", "いです(から|が)", "い", "((?:い|し|た|" +lcKnKt+ ")い)です", "", "((?:い|し|た|" +lcKnKt+ ")い)でした", "だった", "ったです", "った", "ですから", "だから", "ですが", "だが", "しいです", "しい", "でしょう", "だろう", "じゃない(です)*", "ではない", // 「~ですみません」があるので「み」を確認 "(" +lcJp+ "|" +lcEnNo+ ")ですか", "なのか", "(" +lcJp+ "|" +lcEnNo+ ")です((?:(?!ま|み).)| |$)", "である", "(" +lcJp+ "|" +lcEnNo+ ")でした", "だった", "ない(のである|んだ)", "ないのだ", "ないでした", "なかった", "なんだろ", "なのだろ", "んだ(けど|が)", "のだが", "(だ|た|る)けど", "が", "であるけど", "だが", "(ん|の)である", "のだ", //===== // ください系 "下さ", "くださ", // 平仮名に開く //ご遠慮/ください→遠慮/して欲しい "(" +lcKn+ ")くださ" +lcHr+ "+", "して欲しい", // み/てください→み/て欲しい "(て|で)くださ" +lcHr+ "+", "欲しい", // お過ごしください→過ごして欲しい "しくださ" +lcHr+ "+", "して欲しい", "(?:い|き|ち|り)くださ" +lcHr+ "+", "って欲しい", "(?:に|び|み)くださ" +lcHr+ "+", "んで欲しい", // お申し込みください→申し込みをして欲しい "(" +lcNotJs+ ")くださ" +lcHr+ "+", "をして欲しい", //===== // 丁寧語の変換 // お勧めする→勧める "(ご|お|御)(" +lcKn+ "+" +lcBoE+ ")" +lcSiS, "", // ご確認→確認、お昼→昼、御確認→確認 お住まいでも→変換しない "お客(様|さま)", "人", "(他|ほか)の方", "他の人", "お(" +lcHr+ "+)(?:様|さま)", "お", "お(" +lcKn+ "+)(?:様|さま)", "", "(" +lcGkn+ ")(?:さま|さん|氏|先生|ちゃん)", "", "お前", "皆", "(ご|お|御)(" +lcKn+ "+" +lcHr+ "+(ても|でも)(?:(?!ら).)+)", "&tmp;&tmp;", "(ご|お|御)(" +lcKn+ "+" +lcHr+ ")", "", "&tmp", "", //============================================================================= // その他 // こそあど言葉 "(こ|そ|あ|ど)ちらの", "の", "(こ|そ|あ|ど)っち", "ちら", // 助詞ほかの変換 "(" +lcGkn+ ")とか", "など", "(" +lcJp+ ")なんて", "など", "いけれど(?:も)*", "いが", "どうぞ", "ぜひ", "そりゃ(あ)*", "それは", "っていう", "という", "(" +lcJp+ ")じゃ", "では", "ほんま(" +lcJs+ ")", "本当", "(" +lcJs+ ")ねえ", "ない", "てらっしゃっ", "てい", // 文末の調整 "((?:だ|た|" +lcBoU+ "))(?:し)+($| )", "", "(" +lcJp+ "{2})(?:よ|ね|な|ょ|ぉ|あ|お|っ)+($| )", "", "(" +lcGkn+ "|" +lcBoI+ ")なの($| )", "", "のさ($| )", "のだ", "もんだ($| )", "ものだ", // 文頭の調整 "(^| )なんで", "なぜ", "(^| )そういや(あ|ぁ)?", "そういえば", "^" +lcHr+ " ", "", // 感嘆詞 " " +lcJp+ "$", "", // ごみ //===== // 主語の変換 "(?:僕|ぼく|ボク|俺|おれ|オレ|わし|わたし|ワタシ|わたくし|ワタクシ|あたい|あたし)(" +lcJs+ ")", lcShg + "", "(?:うち)(は|が)", lcShg + "", "私って", lcShg + "は", "(?:皆|みなさま|みなさん|てめえ|あなた)(" +lcHr+ ")", lc2sh + "", //===== "end" // 末尾(利用しない) ]; this.prfrdArr = []; for (var i = 0; i < regArr.length - 1; i ++) { if (i % 2 == 0) { this.prfrdArr.push(new RegExp(regArr[i], "g")); } else { this.prfrdArr.push(regArr[i]); } } // ハッシュのキーを配列で取得 function getKeys(hsh) { var resArr = new Array(); for(var i in hsh) resArr.push(i); return resArr; } // 正規表現用リストの作成 function mkRegLst(hsh) { return "(" + getKeys(hsh).join("|") + ")"; } };