JavaScript
正規表現

JavaScriptで正規表現(エスケープ編)

More than 3 years have passed since last update.

正規表現で文字列の置き換えを纏めてみました。

あまり自身ないんで、「おかしいよ」「こうした方がいいんじゃない」っていうのがあったらコメント下さい :smile:

なお、簡単なテストは通していますがすべてを網羅しているわけではありませんので、ご使用になる際にはご自身で十分検証の上ご利用下さい :bangbang:

参考サイト

/**
 * HTMLエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var escapeHTML = function (str) {
    return str
            .replace(/&/g, '&')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
};
/**
 * HTMLアンエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var unEscapeHTML = function (str) {
    return str
            .replace(/(&lt;)/g, '<')
            .replace(/(&gt;)/g, '>')
            .replace(/(&quot;)/g, '"')
            .replace(/(&#39;)/g, "'")
            .replace(/(&amp;)/g, '&');
};
/**
 * JavaScriptエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var escapeJs = function (str) {
    return str
            .replace(/\\/g, '\\\\')
            .replace(/'/g, "\\'")
            .replace(/"/g, '\\"')
            .replace(/\//g, '\\/')
            .replace(/</g, '\\x3c')
            .replace(/>/g, '\\x3e')
            .replace(/(0x0D)/g, '\r')
            .replace(/(0x0A)/g, '\n');
};
/**
 * JavaScriptアンエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var unEscapeJs = function (str) {
    return str
            .replace(/\\'/g, "'")
            .replace(/\\"/g, '"')
            .replace(/\\\//g, '/')
            .replace(/\\x3c/g, '<')
            .replace(/\\x3e/g, '>')
            .replace(/\\\\/g, '\\');
};
/**
 * JavaScriptとHTMLのエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var escapeJsHTML = function (str) {
    return str
            .replace(/\\/g, '\\\\')
            .replace(/'/g, "\\'")
            .replace(/"/g, '\\"')
            .replace(/\//g, '\\/')
            .replace(/</g, '\\x3c')
            .replace(/>/g, '\\x3e')
            .replace(/(0x0D)/g, '\r')
            .replace(/(0x0A)/g, '\n')
            .replace(/&/g, '&amp;');
};
/**
 * 外部リンク不可、括弧類のエスケープ
 * 
 * @param {String} str 変換したい文字列
 */
var noScript = function (str) {
    return str
            .replace(/(\/\/)/g, '//')
            .replace(/\(/g, '(')
            .replace(/\)/g, ')')
            .replace(/\[/g, '[')
            .replace(/\]/g, ']')
            .replace(/\{/g, '{')
            .replace(/\}/g, '}');
};

番外編

/**
 * 文字列strをUTF-8ベースでエンコード
 * 
 * 特別な意味を持つ予約文字「/」「:」「&」「+」「=」はエンコードしない
 * 
 * @param {String} str 変換したい文字列
 */
encodeURI(str);
/**
 * encodeURI、もしくはそれに類似したルーチンによって作成された
 * URIの要素をデコード
 * 
 * @param {String} str 変換したい文字列
 */
decodeURI(str);
/**
 * 文字列strをURIを構成する部分文字列としてエンコード
 * 
 * URIで使用する記号をすべてエンコードするため、完全なエンコードになります。
 * 特別な意味を持つ予約文字「/」「:」「&」「+」「=」などもエンコードする為
 * URI全体に適用するとそれ自体はURIとして機能しなくなる。
 * 
 * @param {String} str 変換したい文字列
 */
encodeURIComponent(str);
/**
 * encodeURIComponent、もしくはそれに類似したルーチンによって作成された
 * URIの要素をデコード
 * 
 * @param {String} str 変換したい文字列
 */
decodeURIComponent(str);