3

ユーザーがこのコードをテキスト ボックスに貼り付けたとします。

public static void Main()
         {
             int a=1+1;
             int b=1+1;
         }

正規表現ですべての行頭を見つけて、連番を次のように追加したい:(望ましい出力:)

/*0*/public static void Main()
/*1*/         {
/*2*/             int a=1+1;
/*3*/             int b=1+1;
/*4*/         }

JSBIN : 私は何かをすることができました:

 newVal = oldVal.replace(/^(\b)(.*)/img, function (match, p1, p2, offset, string)
    {
        return '~NUM~' + p2;
    });

しかし(2つの問題):

の最初のグループ/^(\b)(.*)/は行頭ではないようです。

mまた、フラグを指定しましたが、すべての行に対してそれを行うわけではありません。

私は何を間違っていますか?

(とりあえず、連番は残しておいてください…後で対応します。const文字列で十分です。)

4

4 に答える 4

3

これを使用してみてください:

var str ='public static void Main()\n{\n    int a=1+1;\n    int b=1+1;\n}',
i=0;
str = str.replace(/^/gm, function (){return '/*'+(++i)+'*/';});

console.log(str);

編集:(Rob Wへのオマージュ)

単語境界\bは、クラスに属する文字と、クラスまたはアンカー ( ) の\w別の文字との間のゼロ幅の境界です。\W^ $

したがって^\b.、ドットが [0-9a-zA-Z_] (または \w) を表す場合にのみ一致します。

注意: 文字間の単語境界は、次のように置き換えることができます:

.\b. <=> (?=\w\W|\W\w)..

于 2013-06-23T20:41:22.473 に答える
2

は単語境界ではないため、単語境界は一致しません<start of line><whitespace>

私は使うだろう:

var count = 0;
newVal = oldVal.replace(/^/mg, function() {
    return '/*' + (++count) + '*/';
});
于 2013-06-23T20:42:17.467 に答える
1

\b単語境界です。行頭が必要です^(修飾子と一緒に使用する場合s)。このような:

var oldval = "public static void Main()\n\
         {\n\
             int a=1+1;\n\
             int b=1+1;\n\
         }";
var i = 0;
alert(oldval.replace(/^/mg, function(match) {
    return "/*" + (++i) + "*/"; }
));
于 2013-06-23T20:41:48.917 に答える
0

使ってみて

正規表現:^(\s*.*)

$Counter に置き換えます。$Matches[1]

$Counter は、挿入する行番号を含む変数です。

于 2013-06-23T20:38:19.877 に答える