我有这个字符串:
"# abc # def #"
。
我想保留第一个#
并删除以下发生的#
。
所以预期的输出是:"# abc def "
。
我使用它并且它有效,但感觉就像一个丑陋的黑客:
"# abc # def #".replace("#", "[TEMP]").replace(/#/ig, "").replace("[TEMP]", "#")
如果字符串中存在[TEMP]
,则会失败。不是很大的风险,但无论如何。
我能想到的另一种方法是用char迭代字符串char,但我觉得我错过了一个更简单明了的方法。
答案 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'));