我有这个字符串:"# 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(使用前将#替换为@)