引数の文字列に「<」「>」など文字実態参照があるものは通常表記に置き換えられる。
■使用例
var str = "kokia & 上野洋子";
// "Kokia & 上野洋子"
console.log(_.unescape(str) );
■内部構造
_.unescape = createEscaper(unescapeMap);
// _.invert() は key値を値に値をkey値に入れ替える関数。
var unescapeMap = _.invert(escapeMap);
var escapeMap = {
"&" : "&",
"<" : "&lt;",
">" : "&gt;",
'"' : "&quot;",
"'" : "x27;",
"`" : "x60;"
};
var createEscaper = function(map) {
var escaper = function(match) {
// return escapeMap[match]
return map[match];
};
var source = "(?:" + _.keys(map).join("|") + ")";
// testRegexp = /(?:&amp;|&lt;|&gt;|&quot;|x27;|x60;)/;
var testRegexp = RegExp(source);
// replaceRegexp = /(?:&amp;|&lt;|&gt;|&quot;|x27;|x60;)/g;
var replaceRegexp = RegExp(source, "g");
// _.unescape() の引数はこの返される関数の引数。
return function(string) {
string = string == null ? "" : "" + string;
// testRegexp.test(string); が false なら _.unescape() の引数は何もされずに返る。
// testRegexp.test(string); が true なら マッチした文字が escaper() に渡されマッチした文字が置き換えられる。
// CMS tool のエラーのためリプレイスの表記少し変えています。
return testRegexp.test(string) ? string.r(e)place(replaceRegexp, escaper) : string;
};
};