2015-12-02 57 views
1

任何人都可以使用javascript String.replace()方法建議regEx將(,,,text,,4,text,3,,)更改爲(text,4,text,3)使用正則表達式將(,,, text ,, 4,text,3 ,,)轉換爲(text,4,text,3)

+1

這可能是非常困難的,因爲隨機性的逗號... – Brent

+1

你不會回去你需要像這樣的東西的正則表達式。只是1 /遞歸替換所有雙逗號與單個和2 /替換'(''與'''''''''''' – Kerstomaat

+0

那麼這就是我認爲,我的解決方案是刪除括號,執行String .split(,)'並從返回的數組中移除空單元格。 – TBE

回答

3

這是一個基於正則表達式的解決方案,它是在一個單一的replace電話:

var re = /,+(?=,)|,+(?=\))|(\(),+/g; 

var result = input.replace(re, '$1'); 

RegEx Demo

+1

它在那裏留下一些空間,但不是我們無法處理的東西:)謝謝! – TBE

2

我建議你做無正則表達式,它的更好,如果你做不空項的數組:使用單一

Array.prototype.clean = function(deleteValue) { 
 
    for (var i = 0; i < this.length; i++) { 
 
    if (this[i] == deleteValue) {   
 
     this.splice(i, 1); 
 
     i--; 
 
    } 
 
    } 
 
    return this; 
 
}; 
 

 
var arr = ",,,text,,4,text,3,,".split(","); //convert string into array 
 
arr.clean(""); // clean all empty items 
 

 
console.log(arr); // returns ["text","4","text","3"]

+0

感謝馬科斯,這幾乎是我想到的,只是想確定,因爲我真的很喜歡做的東西與regEx :) – TBE

+0

好吧,我可以推薦你這個頁面https://regex101.com/#javascript來測試和改進並解釋你的正則表達式,這是理解和學習使用它的好方法 –

+0

將函數混合到原型使其更難以保存。簡單的'',,, text ,, 4,text,3 ,,「。split(',')。filter(function(s){return !! s;});'會更乾淨。 – paolobueno

2

此,最有可能,不能做代替,如JavaScript正則表達式是比較有限的,但你可以嘗試:

var str = "(,,,text,,4,text,3,,)" 
str.replace(/^\(,+/g, "(") 
    .replace(/,+\)$/, ")") 
    .replace(/,+/,  ","); 
// → "(text,4,text,3)" 

注意的是3個獨立的情況下,開始,結束(消​​除逗號)和中間(用單個逗號替換多個逗號)。

1

你可以用3項內容替換做到這一點:

  1. 改變一切「很多逗號」,以一個逗號
  2. 刪除第一個括號後的第一個逗號。
  3. 刪除最後一個括號之前的最後一個逗號。

var str = '(,,,text,,4,text,3,,)'; 
 

 
str = str 
 
    .replace(/,+/g, ',') 
 
    .replace(/^\(,/, '(') 
 
    .replace(/,\)$/, ')'); 
 

 
alert(str);