JavaScript用换行符替换换行符

dk1*_*123 3 javascript

我正在寻找用新行字符替换字符串"\n"的任何出现:'\n'.

replace(/[\\n]/g, "\n") 似乎不起作用.

我对正则表达式不熟悉,并且想知道是否有人可以提供帮助.

Ry-*_*Ry- 20

[\\n]是字符集\n.只需取下括号:

….replace(/\\n/g, '\n')
Run Code Online (Sandbox Code Playgroud)

  • 正则表达式解决方案在这里完全有效.这是一个非常好的用例. (10认同)

bjb*_*568 5

不要滥用正则表达式!

如果您正在测试单个字符串,请测试单个字符串。

由于 JavaScript 还没有内置replaceAll的字符串方法,因此您可以创建自己的方法:

String.prototype.replaceAll = function(find, replace) {
    return this.split(find).join(replace);
};
Run Code Online (Sandbox Code Playgroud)

然后就这样称呼它:

mystring.replaceAll('\\n', '\n'); // for the "find" argument, you need to escape the backslash
Run Code Online (Sandbox Code Playgroud)

当然,如果您不喜欢摆弄原型(有理由,而不是自己决定),您可以将其定义为常规函数:

function replaceAll(string, find, replace) {
    return string.split(find).join(replace);
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

replaceAll(mystring, '\\n', '\n');
Run Code Online (Sandbox Code Playgroud)

  • 使用正则表达式替换字符串中的正则字符串也绝对不是滥用。 (16认同)
  • 我绝对_不_推荐为这种事情扩展原生原型。尤其是因为它可能会被添加到 ECMAScript 的未来版本中,而这一点,尤其是不受保护可能会扰乱其行为。 (13认同)
  • `.replace` 似乎比 `split` 和 `join` 效率更高:http://jsperf.com/replaceall29(我没有看到不使用正则表达式的原因......) (8认同)
  • @Derek 我会功夫 不确定我们是否应该关注“效率”,除非明确说明或者很明显 OP 将在大字符串上运行。 (3认同)
  • 令人难以置信的是,由于明智地知道不要滥用正则表达式,这实际上得到了 12 票反对。逆天 (3认同)
  • @Derek 朕会功夫 http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/ 不使用 rejex 很美! (2认同)
  • @minitech 我个人认为它更容易阅读。Rejex 似乎……对于这样一个简单的任务来说太强大了。 (2认同)
  • @minitech 以一种“启蒙”的方式。由于正则表达式,OP *只是*感到困惑。这只是一个简单的例子......如果有一天他们需要用正则表达式元字符替换里面的东西怎么办?他们将 [悲惨地无法进行适当的转义](http://stackoverflow.com/questions/24911753/regex-in-java-for-a-specific-specific-string) 等等。 (2认同)
  • @bjb568 - 不使用正则表达式是丑陋的。拆分和连接字符串也不能很好地替代正则表达式。 (2认同)
  • @Derek我会功夫“拆分和连接字符串不是正则表达式的良好替代品”-当然,但此任务不需要使用正则表达式。所以,我们不是**替换**它们,我们正在解决一个不同的问题。你永远不会因为“脚不能代替汽车”而走路吗? (2认同)
  • 看起来这正在变成一个意想不到的争论......我想说的是不要让问题过于复杂。正则表达式更好也更容易阅读,最重要的是它是用来完成这种任务的,并且可能会被浏览器优化。 (2认同)
  • @Derek我会功夫 这个论点的全部基础是*不是每个人都同意不使用正则表达式会使问题过于复杂*。出于与使用正则表达式相同的原因,有些人不喜欢使用正则表达式 - 可读性是非常主观的。 (2认同)
  • @ValentinMercier:我认为这可能主要是关于原生原型,考虑到现在 14 分钟内有 10 个。另外,我希望你不介意我稍微编辑一下评论。 (2认同)
  • @bjb568 `split` 旨在将字符串拆分为子字符串上的数组。`join` 旨在将数组上的元素连接成一个字符串。单个字符串的多个实例**是**要匹配的模式,因此 RegExp 是完全有效的。 (2认同)
  • @bjb568 事情是——像`.replaceAll` 之类的东西很可能会出现在 EcmaScript 6 或 EcmaScript7 中。这意味着有一天,当 Chrome 更新以支持它时,所有这样做的代码可能会在没有警告的情况下中断。很多人在添加 `.trim` 以及最近将 `.find` 添加到数组时都会发生这种情况。 (2认同)