[英]How to replace all occurrences of a string except the first one in JavaScript?
[英]Remove all occurrences of a character except the first one in string with javascript
我有以下字符串: "# abc # def #"
。
我想保留第一個#
並刪除隨后出現的#
。
因此,預期的輸出將是: "# abc def "
。
我使用了它並且它起作用了,但是感覺就像一個丑陋的hack:
"# abc # def #".replace("#", "[TEMP]").replace(/#/ig, "").replace("[TEMP]", "#")
如果字符串中存在[TEMP]
,它將失敗。 風險不大,但是無論如何。
我可以想到的另一種方法是逐字符地迭代字符串char,但是我覺得我錯過了一種更簡單,更明顯的方法。
如果始終是一開始,則可以執行以下操作:
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'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.