一个正则表达式,用于排除JavaScript中以“//”开头的注释行

时间:2013-12-21 11:12:27

标签: javascript regex comments line

我需要找到所有带有字符串“new qx.ui.form.Button”的行.WHICH EXCLUDE以注释“//”开头。

实施例

line 1:"      //btn = new qx.ui.form.Button(plugin.menuName, plugin.menuIcon).set({"
line 2:"      btn = new qx.ui.form.Button(plugin.menuName, plugin.menuIcon).set({"

模式应该只捕获“第2行”! 注意领先的空间。

最后,我必须在所有 UNCOMMENTED 代码行中使用“this”查找 REPLACE “new qx.ui.form.Button”。 __getButton”。

我试过了。

/new.*Button/g
/[^\/]new.*Button/g

和许多其他人没有成功。

3 个答案:

答案 0 :(得分:1)

在JavaScript中,这有点icky:

^\s*(?=\S)(?!//)

在一行开头排除评论。到目前为止,如此标准。但是你不能回头看这个模式,因为JS不支持任意长度的lookbehind,所以你必须匹配和替换超过需要的东西:

^(\s*)(?=\S)(?!//)(.*)(new qx\.ui\.form\.Button)

将其替换为

$1$2this.__getButton

快速PowerShell测试:

PS Home:\> $line1 -replace '^(\s*)(?=\S)(?!//)(.*)(new qx\.ui\.form\.Button)','$1$2this.__getButton'
      //btn = new qx.ui.form.Button(plugin.menuName, plugin.menuIcon).set({
PS Home:\> $line2 -replace '^(\s*)(?=\S)(?!//)(.*)(new qx\.ui\.form\.Button)','$1$2this.__getButton'
      btn = this.__getButton(plugin.menuName, plugin.menuIcon).set({

话虽如此,你为什么还要关心评论中的内容呢?这并不是说他们对该计划有任何影响。

答案 1 :(得分:0)

啊,如果只有JavaScript有外观......那么你所需要的只是你 /(?<!\/\/.*)new\s+qx\.ui\.form\.Button/g ......好啊。

这也很好用:

.replace(/(.*)new\s(qx\.ui\.form\.Button)/g,function(_,m) {
    // note that the second set of parentheses aren't needed
    // they are there for readability, especially with the \s there.
    if( m.indexOf("//") > -1) {
        // line is commented, return as-is
        // note that this allows comments in an arbitrary position
        // to only allow comments at the start of the line (with optional spaces)
        // use if(m.match(/^\s*\/\//))
        return _;
    }
    else {
        // uncommented! Perform replacement
        return m+"this.__getButton";
    }
});

答案 2 :(得分:0)

Grep使用正则表达式,这将在任何行的开头排除所有空格(如果有的话)加上两个//。     grep -v“^ \ s * //”