2013-07-02 43 views
3

刪除字符我有一個​​字符串值,它會看起來像樣品以下如何使用JavaScript的正則表達式從字符串

data: 


130823 ~ Optics-Bottle Detect failure ~ L 0 ~ P 0 | 130824 ~ Optics-Bubble Detect failure ~ L 0 ~ P 0 

Format: 

ID:   130823 
Description: Optics-Bottle Detect failure 
Reps:  L O 
Pending:  P 0 

我最終的字符串應該基本上都是從各部分的連接字符串,因此通過刪除ID看着上述採樣數據所需的輸出應該如下:

Optics-Bottle Detect failure ~ L 0 ~ P 0 | Optics-Bubble Detect failure ~ L 0 ~ P 0 

可能有ñ在一個字符串中的部件數量。爲了舉例,我只包含了一個包含兩個部分的樣本字符串。

**我正則表達式

進出口使用以下正則表達式,但它僅除去從所述第一部分中的ID字符串

var y = x.replace(/\d{6}\s~\s/g, ""); 
+2

這是從我上面的字符串中刪除兩個ID。 –

+0

這兩個刪除:http://jsfiddle.net/6KkGK/ – nnnnnn

+0

它適用於我:http://jsfiddle.net/bbsss/ –

回答

2

分割字符串成多維陣列使用定界符" | "中和" ~ "。然後,你可以.shift()關閉ID,因爲它是數組中的第一項,並加入了一切重新走到一起:

var y = x.split(" | ").map(function(s) { 
    s = s.split(" ~ "); 
    s.shift(); 
    return s.join(" ~ "); 
}).join(" | "); 

或者,讓子的" ~ "後:

var y = x.split(" | ").map(function(s) { 
    return s.substr(s.indexOf(" ~ ") + 3); 
}).join(" | "); 

或者,糾正你的正則表達式來解釋空白長度的變化:

var y = x.replace(/\d{6}\s+~\s/g, ""); 

但是,這個正則表達式只會只要有總是精確6位數字的ID工作,從不其他地方的~之前有6位數字。例如,如果Reps的值應該是100000或更多,那麼您的RegExp也會將其刪除。

一個更好的正則表達式會採取任何位數(更多小於6),只會匹配它,如果它的第一個項目,或者遵循|

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1"); 
+0

它很好用。謝謝 –

+0

由於它的行標識列值,ID可以很好地超過6位數。我應該只使用上面答案中列出的第一個函數。 –

+0

是的,前兩種解決方案中的任何一種都可以更好地工作,假設'id'總是在每個條目中首先出現。如果你喜歡這個選項,我會用更強大的正則表達式選項更新我的答案。 – gilly3

2

這裏是一個可能的答案,例如

var str = "144515 ~ Commodities-Damaged Reagent Cartridge ~ L 0 ~ P 0 | 144516 ~ Commodities"; 
var n=/\d{6}\s+~/g; 
str = str.replace(n, ""); 
+1

這並不刪除'〜'。 – gilly3