1

我需要解析一些代码。

首先,我需要删除 Comment Out 范围。

我使用javascript的拆分功能:

var ss = input.split(separator);

注释掉表示为

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

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

4

2 回答 2

1

您可以使用它regex来替换评论

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

但请记住,如果字符串本身包含这些字符,它将不起作用

于 2013-07-08T05:16:31.077 回答
1

正如 zerkms 和 Anirudh 建议的那样,Strings like

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

是有问题的。

我想到的一种解决方案是

  1. 首先使用另一个正则表达式选择“字符串”。

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

  3. 替换本问答的操作。注释掉。

  4. 将 "!@#$wacky" 替换为 // \n 等。

完毕

编辑

感谢阿尼鲁德:

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);
}
于 2013-07-08T08:22:49.620 回答