使用哪个 - 递归查询或特定正则表达式

时间:2014-10-09 20:16:43

标签: javascript regex csv

我有一个CSV行,看起来像:

foo, bar, baz, "england, scotland, wales, ireland", sith

并需要将其转换为

"foo", "bar", "baz", "england, scotland, wales, ireland", "sith"

我已经决定用逗号替换双引号之间的所有逗号,但是在双引号之间取一个替代后我有正则表达式的问题,因为在使用时

replace(/(.+)(,)(.+)/g, "'comma'")

我接下一个子串

"england, scotland, wales'comma' ireland"

而不是

"england'comma' scotland'comma' wales'comma' ireland"

我不想使用像

这样的更复杂结构的正则表达式
/(.+)(,)(.+)(,)(.+)(,)(.+)/g

并希望用逗号分组,但不能为它选择正确的正则表达式,所以我使用带有for循环匹配的递归子字符串搜索。我做对了,还是有一个适合的正则表达式,但我还没有找到它。谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用此模式:

var re = /"([^"]*)"|([^\s,][^,]*)/g;
var str = 'foo, bar, baz, "england, scotland, wales, ireland", sith';
var subst = '"$1$2"';

var result = str.replace(re, subst);

console.log(result);