0

stackexchange が引用符を付ける方法が気に入っています。自分のサイトに追加しようとしましたが、複数の行にまたがって動作させることができず、1 行だけでした。複数の行を実行するには何を変更する必要がありますか?

これが私が現在使用しているものです:

val = val.replace(/^>(.+?)($|\n)/ig, "<blockquote>$1</blockquote>");


編集
私は別のスタイルに行くことにしました。

val = val.replace(/""([\s\S]*.+?)""/igm, "<blockquote>$1</blockquote>");
4

2 に答える 2

0

私は正規表現でこれを行うのをやめました。

var a = '>abc\n>def\n>ghi'.split( /\n/ ); // [">abc", ">def", ">ghi"]

var previousInBlock = false;
var currentInBlock = false;
var nextInBlock = false;

for( var i = 0; i < a.length; i++ ) {

    previousInBlock = currentInBlock;
    currentInBlock = a[i].indexOf( ">" ) === 0;
    nextInBlock = ( i + 1 ) < a.length ? a[i+1].indexOf( ">" ) === 0 : false;

    if ( currentInBlock ) {
        a[i] = a[i].slice( 1 );

        if( !previousInBlock ) { 
            a[i] = "<blockquote>" + a[i]; 
        }

        if ( !nextInBlock ) { 
            a[i] = a[i] + "</blockquote>"; 
        }
    }
}

a.join( "\n" );

上記のコードは、複数のブロック引用符のセットを処理できます。

于 2013-01-10T23:34:49.153 に答える
0

置き換えるのではなく、各行と照合してから、照合した行を1つの文字列に結合します。

このようなもの:

var val = '>abc\n>def\n>ghi',
    regex = /(?:^>)(.+)(?:$|\n)/img,
    match = '', quote = [];

while((match = regex.exec(val)) !== null){
  quote.push(match[1]);
}

val = '<blockquote>'+quote.join('<br/>')+'</blockquote>';

デモ:http://jsfiddle.net/k7DVu/

于 2013-01-10T23:39:56.680 に答える