我有类似下面的文本,其中嵌入的空格显示了某些xml数据的缩进:
<Style id="KMLStyler"><br>
<IconStyle><br>
<colorMode>normal</colorMode><br>
我需要使用Javascript用
替换每个LEADING空间
所以它看起来像这样:
<Style id="KMLStyler"><br>
<IconStyle><br>
<colorMode>normal</colorMode><br>
我尝试过基本替换,但它匹配所有空格,而不仅仅是前导空格。除了领先的那些,我想留下所有的空间。有什么想法吗?
答案 0 :(得分:7)
JavaScript没有方便的\G
(甚至不是后视),所以这个AFAIK没有纯正的正则表达式解决方案。这样的事情怎么样:
function foo() {
var leadingSpaces = arguments[0].length;
var str = '';
while(leadingSpaces > 0) {
str += ' ';
leadingSpaces--;
}
return str;
}
var s = " A B C";
print(s.replace(/^[ \t]+/mg, foo));
产生:
A B C
在这里测试:http://ideone.com/XzLCR
或者使用匿名内部函数(它被称为?),如评论中的glebm所评论:
var s = " A B C";
print(s.replace(/^[ \t]+/gm, function(x){ return new Array(x.length + 1).join(' ') }));
在此处查看 :http://ideone.com/3JU52
答案 1 :(得分:1)
使用^
将模式锚定在字符串的开头,或者如果您处理多行字符串(即:嵌入的换行符),则将\n
添加到模式中。您需要一次匹配整个前导空格集,然后在替换中检查匹配的长度以确定要插入多少个nbsps。