2014-07-21 33 views
2

我有一個字符串,像這樣:刪除字符串 - JavaScript或jQuery的

var main_str = 'Hi I have |str| way |str||str| too |str||str||str| many breaks'; 

我需要刪除旁邊另一個|str|發生的任何|str|

通緝的結果:

var main_str = 'Hi I have |str| way |str| too |str| many breaks |str|'; 

換句話說,如果有很多|str|彼此相鄰,我們刪除所有,但一個。

回答

3
var main_str = 'Hi I have |str| way |str||str| too |str||str||str| many breaks'; 
main_str = main_str.replace(/(\|str\|){2,}/g, '|str|'); 

console.log(main_str); 
+0

非常感謝:) –

1

另一種簡單的方法來做到這一點是.split()根據您打算什麼分隔符使用,.filter()對非空元素,然後.join()用相同的分隔字符串:

的JavaScript

var str = "Hi I have |str| way |str||str| too |str||str||str| many breaks"; 

var x = str.split("|str|").filter(function (d){ 
    return d.length; 
}).join("|str|"); 

console.log(x) 
// returns "Hi I have |str| way |str| too |str| many breaks |str|"; 

這使您可以避免爲每種情況制定特定的正則表達式 - 不轉義字符 - 而是通過.split()運行變量d .join()

不確定此解決方案是否爲faster。非Chromium瀏覽器似乎更快。我會推測,Chrome是有效的,因爲v8引擎,在運行一百萬次之前編譯一個正則表達式,使得正則表達式解決方案更快。

fiddle

+0

你的答案是相當不錯:)但我想另外一個是比較容易 –

+0

@ user3425760雖然稍微詳細,該解決方案更快。 – royhowie

+0

慢多少?在我的機器上超過1M次迭代需要1200毫秒。另一個需要700毫秒。 –

相關問題