我需要找到所有带有字符串“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
和许多其他人没有成功。
答案 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 * //”