javascript - 如何替换文本区域中的换行符

标签 javascript html

我想替换文本区域中的空格和换行符, 如果输入是

________________________________________
i am a 
fat

boy zzz
________________________________________

结果应该是

i<sp>am<sp>a<br>fat<br><br>boy<sp>zzz

其中空格被 <sp> 替换并将换行符替换为 <br> .

空间替换成功, 但当我尝试用 <br> 替换新行时失败了(我尝试了3-4种不同的方法,但没有一个能成功)

如果有人有想法,将不胜感激?提前致谢

代码如下

<!DOCTYPE html>
<html>
<body>

<textarea id="txtArea" rows="10" cols="70">i am fat boy </textarea>

<input type="text" id="StringTextBox" value="" >

<p id="demo"> </p>

<button onclick="myFunction()">Try it</button>

<script>

function myFunction() {
    var str = document.getElementById("txtArea").value; 

  var res = str.split(' ').join('&lt'+"sp"+'&gt');

    document.getElementById("demo").innerHTML = res;

}
</script>

</body>
</html>

最佳答案

我不会使用splitjoin对于这一点,直接更换即可。请注意,不同的操作系统(甚至同一操作系统上的不同浏览器)使用不同的换行符,因此为了覆盖您的基础,您可能需要进行替换:

str = str.replace(/(?:\r|\n|\r\n)/g, '<br>');

这将取代每个独立的 \r ,一个独立的\n ,或 \r\n彼此相邻 <br> .

当然,我们将其与 .replace(/ /g, '<sp>') 结合起来。做空格:

str = str.replace(/ /g, '<sp>').replace(/(?:\r|\n|\r\n)/g, '<br>');

免费的实例:

var originals = [
  "i am a\nfat\n\nboy zzz",
  "i am a\rfat\r\rboy zzz",
  "i am a\r\nfat\r\n\r\nboy zzz"
];
  
originals.forEach(function(str) {
  str = str.replace(/ /g, '<sp>').replace(/(?:\r|\n|\r\n)/g, '<br>');
  snippet.log(str);
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

如果它是一个非常大的字符串,那么两次遍历它(两次调用 replace )可能并不理想。在这种不太可能的情况下,我们可以将事物组合成一个 replace使用回调函数:

str = str.replace(/(?: |\r|\n|\r\n)/g, function(m) {
    return m === " " ? "<sp>" : "<br>";
});

实例:

var originals = [
  "i am a\nfat\n\nboy zzz",
  "i am a\rfat\r\rboy zzz",
  "i am a\r\nfat\r\n\r\nboy zzz"
];
  
originals.forEach(function(str) {
  str = str.replace(/(?: |\r|\n|\r\n)/g, function(m) {
      return m === " " ? "<sp>" : "<br>";
  });
  snippet.log(str);
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

但在正常情况下,字符串大小合理,需要两次调用 replace直接替换可能比使用回调函数的单个调用更好。

关于javascript - 如何替换文本区域中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080989/

相关文章:

javascript - 如何通过javascript杀死chromedriver.exe

javascript - 如果元素存在然后检查?

php - CKEditor 获取选定的编辑器

javascript - 在最后一张幻灯片上暂停/停止计数器

javascript - 单击按钮时链接到另一个 html 文档

Javascript,将复选框与 JSON 匹配

javascript - 如何通过 RequireJS 加载 jQuery Migrate for jQuery?

jquery - 将每 2 个 div 包装在一个新的 div 中

PHP、HTML、Javascript执行顺序

html - 如何轻松地在圆圈周围设置文字样式?