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)时才会匹配。

注意:to 字符之间的单词边界,可以替换为:

.\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 。$比赛[1]

其中 $Counter 是包含要插入的行号的变量。

于 2013-06-23T20:38:19.877 回答