假设用户将此代码粘贴到文本框中:
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字符串就足够了。)
答案 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是包含要插入的行号的变量。