2015-12-02 43 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