使用javascript删除字符串中除第一个字符外的所有字符

时间:2018-01-29 15:42:23

标签: javascript string

我有这个字符串: "# abc # def #"

我想保留第一个#并删除以下发生的#

所以预期的输出是:"# abc def "

我使用它并且它有效,但感觉就像一个丑陋的黑客:

"# abc # def #".replace("#", "[TEMP]").replace(/#/ig, "").replace("[TEMP]", "#")

如果字符串中存在[TEMP],则会失败。不是很大的风险,但无论如何。

我能想到的另一种方法是用char迭代字符串char,但我觉得我错过了一个更简单明了的方法。

1 个答案:

答案 0 :(得分:4)

如果它始终在开头,你可以这样做:

const result = '# A # B # C'.replace(/(?!^)#/g, '');
console.log(result);

这将替换旁边没有字符串开头的每个#

如果它不总是在你的字符串的开头,可能最简单的方法是使用replace()的回调形式:

const result = 'SOME STUFF # A # B # C MORE STUFF'.replace(/#/g, (val, index, str) => index === str.indexOf('#') ? val : '');
console.log(result);

基本上,这种方法将获得所有#。然后我们只比较它的索引,如果它是第一个索引,我们就不会替换它。否则,我们会。

如果您想稍微清理它,可以避免在循环之前保存indexOf()检查。如果琴弦很长或者你需要做一吨(这对于小套装来说是微不足道的收益),这将有所帮助:

const cleanHashes = str => {
  const firstIndex = str.indexOf('#');
  return str.replace(/#/g, (v, i) => i === firstIndex ? v : '');
}

console.log(cleanHashes('# A # B # C'));
console.log(cleanHashes('SOME STUFF # A # B # C MORE STUFF'));