- 主题:求证一个关于正则表达式的问题
需要一个javascript函数,输入是一个string,代表一段javascript代码。这个代码可
能以注释开始,需要移除开始的注释(保证程序开始的第一一行不是注释)。
为简化起见只考虑单行注释,就像
// xxx ...
这种。
很容易写一个正则表达式去match,input的开始: /^\s*\/\/[\s\S]*?\n/;
然后在一个while循环里,不停地移除match。
我想能不能把while循环省去了,用一个正则表达式就好,就像:
/(^\s*\/\/[\s\S]*?\n)+/
但是发现这样只能移除第一行的注释。我猜这个实际是做不到的(必须用循环)。因为
正则表达式不是多行模式,^只能match一次。
对吧?
--
FROM 209.131.62.*
这里不能用m,因为只想移除程序开始的注释,用m的话,^会匹配每一行的开始。
【 在 Goofect (在线1010小时,显示10小时...) 的大作中提到: 】
: /m可以多行
--
FROM 209.131.62.*
如果你用m,如果输入含有有多行注释,只执行一次能够全部干掉么?
【 在 Goofect (在线1010小时,显示10小时...) 的大作中提到: 】
: 只执行一次,并且只有匹配的位置为0才移除不就好了
--
FROM 209.131.62.*
哈,还可以这么用。学习了。谢谢!
【 在 Goofect (在线1010小时,显示10小时...) 的大作中提到: 】
: var str="\/\/line1\n\/\/line2\ncode\n\/\/line3";
: alert(str.replace(/(^\/\/.*\n)+/m,function(a,b,c){
: return c==0? "": a;
: ...................
--
FROM 76.126.237.*
如果这种判断index是否为0的技巧和g flag一起用,可以同时处理单行和多行的commen
t。对吧?
function removeLeadingComment(inputStr){
var nRemoved = 0;
return inputStr.replace(/(?:\s*\/\/.*\n|\s*\/\*[\s\S]*?\*\/)/g,
function(str,offset){
//alert(str + offset + "-" + nRemoved);
if(offset == nRemoved){
nRemoved += str.length;
return "";
} else {
return str;
}
});
}
【 在 Goofect (在线1010小时,显示10小时...) 的大作中提到: 】
: var str="\/\/line1\n\/\/line2\ncode\n\/\/line3";
: alert(str.replace(/(^\/\/.*\n)+/m,function(a,b,c){
: return c==0? "": a;
: ...................
--
FROM 76.126.237.*