用 替换前导空格 在Javascript中

Kev*_*uli 1 javascript regex

我有如下文本,嵌入的空格显示某些xml数据的缩进:

&lt;Style id="KMLStyler"&gt;<br>
  &lt;IconStyle&gt;<br>
    &lt;colorMode&gt;normal&lt;/colorMode&gt;<br> 
Run Code Online (Sandbox Code Playgroud)

我需要使用Javascript来替换每个LEADING空间

&nbsp;
Run Code Online (Sandbox Code Playgroud)

所以它看起来像这样:

&lt;Style id="KMLStyler"&gt;<br>
&nbsp;&nbsp;&lt;IconStyle&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&lt;colorMode&gt;normal&lt;/colorMode&gt;<br> 
Run Code Online (Sandbox Code Playgroud)

我尝试了一个基本的替换,但它匹配所有空间,而不仅仅是领先的空间.除了领先的那些,我想留下所有的空间.有任何想法吗?

Bar*_*ers 8

JavaScript没有方便\G(甚至不是后视),所以这个AFAIK没有纯正的正则表达式解决方案.这样的事情怎么样:

function foo() {
  var leadingSpaces = arguments[0].length;
  var str = '';
  while(leadingSpaces > 0) {
    str += '&nbsp;';
    leadingSpaces--;
  }
  return str;
}

var s = "   A B C";
print(s.replace(/^[ \t]+/mg, foo));
Run Code Online (Sandbox Code Playgroud)

产生:

&nbsp;&nbsp;&nbsp;A B C
Run Code Online (Sandbox Code Playgroud)

在此测试:http://ideone.com/XzLCR

编辑

或者使用匿名内部函数(它被称为?),如评论中的glebm评论:

var s = "   A B C";
print(s.replace(/^[ \t]+/gm, function(x){ return new Array(x.length + 1).join('&nbsp;') }));
Run Code Online (Sandbox Code Playgroud)

在这里的行动:http://ideone.com/3JU52