タグの外側(内側)だけ置換

提供: MeryWiki
移動先: 案内検索

// replaceOneside.js
// 選択範囲のタグ("<"と">")の外側(または内側)だけを対象として置換します。
// reg = /.*/, replaceTo = "", repside.INSIDE のとき、タグの除去になります。
// 2013/01/11

var str = Editor.ActiveDocument.Selection.Text
var reg = new RegExp( ".*", "ig" );
var replaceTo = "";
var repside = { OUTSIDE : true, INSIDE : false }
str = replaceOneside( str, reg, replaceTo, repside.OUTSIDE );
Editor.ActiveDocument.Selection.Text = str;

function replaceOneside( str, reg, rep, repOutside ) {
// 返り値:文字列。
// str:置換する文字列。
// reg:置換前パターン(文字列または正規表現)。
// rep:置換後文字列。
// repOutside:タグの外側を置換するとき true。falseのときは内側。
    if ( repOutside == undefined ) { repOutside = false };
    var tag_simple = "<[^>\n]*>";
    var others = "[^<]+";
    if ( repOutside ) {
        others = "(" + others + ")";
    } else {
        tag_simple = "(" + tag_simple + ")";
    }
    var regex = new RegExp( [ tag_simple, others ].join( "|" ), "ig" )
    return str.replace( regex, func );
    function func( s0, s1 ) { return ( s1 === undefined ) ? s0 : s1.replace( reg, rep ) }
};