使用Javascript正则表达式插入行号?

时间:2013-06-23 20:34:13

标签: javascript regex

假设用户将此代码粘贴到文本框中:

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 : I did managed to do something with :

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

但是(2个问题):

似乎/^(\b)(.*)/中的第一个组不是该行的开头,

它也不会对所有行都这样做 - 尽管我确实指定了m标志。

我做错了什么?

(现在,请保留序号...我稍后会处理它。一个const字符串就足够了。)

4 个答案:

答案 0 :(得分: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类中的另一个字符或锚点^ {之间的零宽度cesure {1}})。

因此$仅在点代表[0-9a-zA-Z_](或\ w)时才匹配。

注意:字符之间的字边界可以替换为:

^\b.

答案 1 :(得分:2)

单词边界不匹配,因为<start of line><whitespace>不是单词边界。

我会用:

var count = 0;
newVal = oldVal.replace(/^/mg, function() {
    return '/*' + (++count) + '*/';
});

答案 2 :(得分: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) + "*/"; }
));

答案 3 :(得分:0)

尝试使用

正则表达式:^(\s*.*)

替换为:$ Counter。 $匹配[1]

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