注释范围正则表达式

regex of comment out range

本文关键字:正则表达式 范围 注释      更新时间:2023-09-26

>我需要解析一些代码。

首先,我需要删除注释范围。

我使用javascript的拆分功能:

var ss = input.split(separator);

注释掉表示为

// ....  'n
/* ....  */

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

您可以使用

regex替换注释

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

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

正如 zerkms 和 Anirudh 所建议的那样,字符串喜欢

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

是有问题的。

我想到的一个解决方案是

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

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

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

  4. 将"!@#$wacky"的重新系回//' 等。

编辑

感谢阿尼鲁德:

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);
}