2013-04-04 44 views
3

我正在为网站的后端输入文本。我想要一些东西自动更正。例如,我将textarea中的新行转换为<br>。我也想让用户在新行上标签。将多个空格转换为 使用Javascript开始行

这需要更改空间到&nbsp;。我只想转换位于新行开头的空格。例如,假设用户键入此为一个textarea:

This is my text! It's pretty great. 
This is a second line. 
    This is a third line, that is indented by four spaces. 
This is a fourth line. 

使用正则表达式,我已经得到了各行的第一个空间转换:

.replace(/^[ ]/mg,'&nbsp;'); 

我已经得到多个空格转换为一个空间:

.replace(/[ ]{2,}/mg,'&nbsp;'); 

我不知道如何转换所有四个这些缩进空间虽然。我一直在互联网上搜索大约3个小时,我发现了类似的答案,但没有什么可以在这里工作的。有什么想法吗?

回答

4
function escapeSpaces(str) { 
    var regex = /^ +/mg; 

    return str.replace(regex, function (match) { 
     var result = ""; 
     for (var i = 0, len = match.length; i < len; i++) { 
      result += "&nbsp;"; 
     } 
     return result; 
    }); 
} 

这可能不是最好的解决方案,但它的工作原理。

或者:

function escapeSpaces (str) { 
    return str.replace(/^ +/mg, function (match) { 
     return match.replace(/ /g, "&nbsp;"); 
    }); 
} 
+0

这些的两个工作,直到我取代换行符 '\ n' 与
。这打破了他们。 – 2013-04-10 13:31:10

+1

捕获括号是不必要的,并且效率稍低。使用'match'而不是'spaces'去除它们和'spaces'参数。另外,如果没有*空格,则不需要替换,所以使用'+'而不是'*'。 – PointedEars 2013-04-10 13:48:23

+0

@AndyM“医生,如果我移动它,我的手臂会疼。”不要这样做。 *稍后*。 – PointedEars 2013-04-10 13:57:26