【问题标题】:Inserting line numbers using Javascript regex?使用 Javascript 正则表达式插入行号?
【发布时间】:2013-06-24 06:11:37
【问题描述】:

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

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字符串就足够了。)

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    尝试使用这个:

    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)..

    【讨论】:

    • 现在我可以用带有行引用的代码提问。 (在这里 SO - 就像我在这里做的一样 stackoverflow.com/questions/17263326/…
    • @RoyiNamir:对不起,我忘记给我的台词编号了!
    【解决方案2】:

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

    我会使用:

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

    【讨论】:

      【解决方案3】:

      \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) + "*/"; }
      ));
      

      【讨论】:

        【解决方案4】:

        尝试使用

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

        替换为: $Counter 。 $Matches[1]

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

        【讨论】:

        • \b 有什么问题?它应该是一个单词的边界,这正是 ^\b 是什么......不是吗?
        • 不,因为 \b 是单词和非单词之间的边界。句子开头^ 和第一个空格之间不存在此边界。
        猜你喜欢
        • 2017-08-28
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多