在字符串中只保留一次子字符串

时间:2017-10-15 18:39:29

标签: javascript string typescript

我正在寻找一个函数来删除除第一个字符串之外的字符串中出现的所有子字符串,例如

function keepFirst(str, substr) { ... }
keepFirst("This $ is some text $.", "$");

应该返回:This $ is some text .

我可以使用split()然后for(){}来做,但有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

此解决方案找到rep第一次出现的索引,并删除其后的所有rep

console.log(keepFirst("This $ is some text $$ with $ signs.", "$"));
function keepFirst(str, rep) {
  var fInd = str.indexOf(rep);
  var first = str.substring(0, fInd + rep.length);
  var rest = str.substring(fInd + rep.length);
  return first + rest.replace(
    new RegExp(rep.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), 'g'), 
    '');
}

答案 1 :(得分:0)

这可能是最有效的最短代码。它使用destructuring assignment

function keepFirst(str, substr) {
  const [
    first,
    ...rest
  ] = str.split(substr);

  return first + (rest.length
    ? substr + rest.join("")
    : "");
}