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

2023-12-26

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

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

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

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

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

如果[TEMP]存在于字符串中。虽然风险不大,但无论如何。

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


如果它总是在开头,你可以这样做:

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'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用javascript删除字符串中除第一个字符之外的所有出现的字符 的相关文章

随机推荐