2014-07-22 26 views
0

我有以下字符串:的Javascript跳過雙管,可在一個字符串

var test = "test|2014-07-22 12:13:47||ASD|\|nameOfSomething123\||anothersmt"; 
var s = test.split('|'); 
console.log(s); 

//outputs 
[ 'test', 
    '2014-07-22 12:13:47', 
    '', 
    'ASD', 
    '', 
    'nameOfSomething123', 
    '', 
    'anothersmt' ] 

因爲| nameOfSomething123 |也有管道,分裂('|'),結果不好,我需要擺脫第5和第6的位置。不好。

我想拆分它,但跳過\ | nameOfSomething123 \ |

有誰知道如何解決它?

謝謝。

+3

預期產量是多少? – falsetru

+2

爲什麼一個值包含您用於分離的相同符號?這很可能是最初要解決的問題。 – Christoph

+1

我會建議使用另一個符號。更容易。 – pattmorter

回答

5

首先,我將假設您的test字符串實際上包含\|序列。如果您要按照所示方式編寫字符串文字,則\|將被解釋爲|的轉義序列。對於這個腳本工作,因爲你已經證明,你需要寫test這樣的:

var test = "test|2014-07-22 12:13:47||ASD|\\|nameOfSomething123\\||anothersmt"; 

你可以做到這一點很容易地使用match代替split

test.match(/(\\\||[^|])+/g); 

// outputs 
[ "test", 
    "2014-07-22 12:13:47", 
    "ASD", 
    "\|nameOfSomething123\|", 
    "anothersmt" ] 

此模式相匹配一個或多個\|的序列或除|以外的任何字符。請注意,\|需要轉義爲字面\|字符。考慮到你的樣本輸入,這應該完成目標。如果您需要捕獲像||兩管之間的空字符串,那麼你可以使用split周圍的匹配值和filter出分隔符(當然,如果\可以逃脫,太,這是複雜了一點)

。例如:

test.split(/((?:\\\||[^|])*)/g).filter(function(x, i) { return i % 2 }); 

// outputs 
[ "test", 
    "2014-07-22 12:13:47", 
    "", 
    "ASD", 
    "\|nameOfSomething123\|", 
    "anothersmt" ] 

這工作,因爲split將返回任何捕獲的子串作爲結果數組中的一個單獨的條目。然後filter只是從結果中挑選其他元素。請注意,filter需要ECMAScript 5.1或更高版本,因此它可能無法在舊版瀏覽器中使用。如果這是一個問題,請參閱鏈接文檔中描述的填充選項。

+0

也擊敗了我它:p – pattmorter

+2

OP應該澄清,但似乎沒有要求在「ASD」之前刪除空結果。 –

+0

@PatrickQ好點。我爲這種情況提供了一種替代解決方案。 –

0

我不明白爲什麼這是一個難題。如果你的分隔符是總是|,那麼當你從.split得到一個空字符串時唯一的情況是當你有一個雙重的|(或三重或四重)時。只要雙管對你沒有任何語義目的,所有你需要做的就是擺脫空字符串:

function check_for_empty_string(element){ 
    if (element.length != 0) return element; 
} 

s = s.filter(check_for_empty_string); 

現在s應該只包含非空字符串,就大功告成了。 Array.filter是一個JavaScript內置的需要檢查元素的回調。無論您從回調中返回,通過過濾器並進入新陣列。在這裏,我使用舊陣列作爲目標,爲簡潔起見,但.filter會返回一個新陣列,以便您可以保留舊陣列。

+1

您錯過了重點這是爲了識別逃逸的管道'\ |'(在你的防守中,帖子的標題很混亂)。 – Christophe

+0

@Christophe夠公平的,我會盡快解決它。 – mechalynx

+0

由於p.s.w.g的回答幾乎滿足了OP的需求,我不認爲有一種方法可以修改我的答案而不會使其與他的答案相同。所以我會把它留在這裏,以防有人發現這個問題,並且正在尋找這個解決方案,而不是OP想要的解決方案。 – mechalynx

相關問題