评论范围的正则表达式

时间:2013-07-08 03:46:57

标签: javascript regex

我需要解析一些代码。

对于首发,我需要删除注释范围。

我使用javascript的分割功能:

var ss = input.split(separator);

注释表示为

// ....  \n
/* ....  */

分隔符是什么样的正则表达式?

2 个答案:

答案 0 :(得分:1)

您可以使用此regex替换评论

var pattern=new RegExp("//.*?(?=[\\n\\r]+|$)|/[*].*?[*]/","g");

但请记住,如果字符串本身包含那些字符

,它将无法工作

答案 1 :(得分:1)

正如zerkms和Anirudh所说,Strings就像

var foo = "//it's not a comment";

是有问题的。

我想到的一个解决方案是

  1. 选择" Strings"首先使用另一个正则表达式。

  2. 在选定的" Strings"中,将注释符号的字符替换为某些古怪的字符串,例如 "!@#$ wacky1""!@#$ wacky2"等

  3. 更换此Q& A的操作。评论出来。

  4. 退回"!@#$ wacky"那些// \ n等。

  5. 完成

    修改

    感谢Anirudh:

    var regex = new RegExp("//.*?(?=[\\n\\r]+|$)|/[](.|\n)?[*]/","g"); 
    

    工作代码

    Array.prototype.last = function (n)
    {
        return this[this.length - 1 - n];
    }
    String.prototype.replaceAll = function (org, dest)
    {
        return this.split(org).join(dest);
    }
    
    var read = function (input)
    {
        var cmtprts = ['//', '/*', '*/', '(', ')'];
        var cmtprtsE = cmtprts.map(function (s, i)
        {
            return "thisisareplacement" + i;
        });
        //==========================
    
        var strgs = input.match(/"(?:[^\\"]|\\.)*"/ig);
        var strgs1 = [];
        var input1 = [];
    
        // escape cmtprts  during each Strings
        if (strgs)
        {
            strgs.map(function (str, str_i)
            {
                var str1 = [];
                cmtprts.map(function (mark, mark_i)
                {
                    if (mark_i == 0)
                    {
                        str1[mark_i] = str.replaceAll(mark, cmtprtsE[mark_i]);
                    }
                    else
                    {
                        str1[mark_i] = str1[mark_i - 1].replaceAll(mark, cmtprtsE[mark_i]);
                    }
                })
    
                strgs1[str_i] = str1.last(0);
    
                if (str_i == 0)
                {
                    input1[str_i] = input.replaceAll(strgs[str_i], strgs1[str_i]);
                }
                else
                {
                    input1[str_i] = input1[str_i - 1].replaceAll(strgs[str_i], strgs1[str_i]);
                }
    
            });
    
        }
    
        // comment out removing
        var re2 = new RegExp("//.*?(?=[\\n\\r]+|$)|/[*](.|\n)*?[*]/", "g");
        var input2 = input1.last(0).replaceAll(re2, '');
    
        // "thisisareplacement"+i  back to normal string
        var input3 = [];
        cmtprtsE.map(function (mark, mark_i)
        {
            if (mark_i == 0)
            {
                input3[mark_i] = input2.replaceAll(mark, cmtprts[mark_i]);
            }
            else
            {
                input3[mark_i] = input3[mark_i - 1].replaceAll(mark, cmtprts[mark_i]);
            }
        })
        return input3.last(0);
    }