2015-12-02 46 views
0

逃脫我寫的用逗號分割的字符串編碼:分割字符串,而不是在JavaScript

"Keyword,slug,description".split(','); 

導致像["Keyword", "slug", "description"]

這工作得很好了一段時間的數組,直到有人需要在他們的描述中有一個逗號。

我知道我可以match替代split和使用正則表達式,但唯一的正則表達式我能想出涉及負回顧後,像這樣:

"Keyword,slug,description".match(/(?<!\\),/); 

不幸的是JavaScript不支持lookbehinds 。

有沒有其他方法可以做到這一點?

+1

是您的字符串_always_'關鍵字,蛞蝓,description'其中'keyword'和'slug' _永遠_有逗號?所以你只需要找到前兩個逗號,之後的所有內容都是描述,不管它包含什麼字符? –

+6

你將如何從comma-as-regular-char中指定逗號作爲分隔符? ''splitme,逗號,分隔,splitme「 - >'[」splitme「,」逗號,分隔符「,」splitme「]並不十分明顯。也許你應該首先解決生成這個CSV字符串的問題,並且像json那樣使用更強大的編碼方法。 –

+0

在用於分割之前,您是否可以不轉義每個描述實例? – gothical

回答

1

所以使用匹配,而不是分裂

"Keyword,slug,description".match(/([^,]+),([^,]+),(.*)/); 

將導致

["Keyword,slug,description", "Keyword", "slug", "description"] 

還有其他的方法寫的正則表達式,剛摘的東西快。

+1

這似乎導致一個數組其中1項:[「關鍵字,slu,,描述」] –

+0

哎呦,某些原因我添加了ag標誌...編輯它 – epascarello

+0

這將適用於我。我只需要忽略數組中的第一項。謝謝 –

1

這裏有一個不那麼好方法,但總的原則就可以派上用場:

"keyword,slug,foo\\,bar" 
.replace('\\,', '{COMMA}') 
.split(',') 
.map(function(v){return v.replace('{COMMA}',',')}) 
+0

我沒有接受這個答案,但這是一個很酷的解決方案。謝謝 –

+0

這很好 - 在你的情況下,其他答案更好,但我想我會展示的方法。感謝upvote! – Kenney