JavaScript会在保留原始换行符的同时取代所有内容

时间:2017-09-01 01:18:41

标签: javascript regex

我有一些代码输出如下:



function replaceAllButLast(str, splitRegex, pOld, pNew) {
  var parts = str.split(splitRegex)
  if (parts.length === 1) return str
  return parts.slice(0, -1).join(pNew) + pOld + parts.slice(-1)
}

var str = "fred\r\nfred\r\nfred\r\n"
var desiredResult = replaceAllButLast(str, /(?:\r?\n|\r)/, '\n', '\n+')

console.log(desiredResult)




结果几乎是所希望的。但是,代码假定正则表达式拆分操作在\ n上拆分,因此将其替换为\ n

然而,实际上它可能会分裂\ r \ n(windows - 如示例中所示)或\ r \ n(旧macs)

有没有人有一些代码可以提供与此处代码相同的输出但是会保留原始换行符,同时仍然在换行符后添加+(最后一行除外)。

我使用纯粹的香草JavaScript。

PS我必须使用正则表达式/(?:\r?\n|\r)/

PPS无需使用.split()

2 个答案:

答案 0 :(得分:1)

我用可见字符替换了你的正则表达式,这样你就可以看到发生了什么:

var input = "fredEOLfredENDLfredFINfred";
input = input.replace(/(EOL|ENDL|FIN)/g, "$1+");
console.log(input);

答案 1 :(得分:1)

这会保留上一个换行符,但其他人添加了+,请参阅replace



var str = "fred\r\nfred\r\nfred\r\n";
var splitRegexp = new RegExp(/(?:\r?\n|\r)/, 'g')

var newstr = str.replace(splitRegexp, function(match, offset, string) {
  var follow = string.slice(offset);
  var isLast = follow.match(splitRegexp).length == 1;

  if (!isLast) {
    return match + '+';
  } else {
    return match;
  }
})
console.log(newstr)