Javascript 使用哪一个-递归查询或特定正则表达式
我有一个CSV行,看起来像:Javascript 使用哪一个-递归查询或特定正则表达式,javascript,regex,csv,Javascript,Regex,Csv,我有一个CSV行,看起来像: foo, bar, baz, "england, scotland, wales, ireland", sith 需要把它转换成 "foo", "bar", "baz", "england, scotland, wales, ireland", "sith" 我决定用“逗号”替换双引号之间的所有逗号,但是在双引号之间选择了一个子字符串之后,我对regex在这样做时遇到了问题,因为在使用 replace(/(.+)(,)(.+)/g, "'comma'") 我取
foo, bar, baz, "england, scotland, wales, ireland", sith
需要把它转换成
"foo", "bar", "baz", "england, scotland, wales, ireland", "sith"
我决定用“逗号”替换双引号之间的所有逗号,但是在双引号之间选择了一个子字符串之后,我对regex在这样做时遇到了问题,因为在使用
replace(/(.+)(,)(.+)/g, "'comma'")
我取下一个子串
"england, scotland, wales'comma' ireland"
而不是
"england'comma' scotland'comma' wales'comma' ireland"
我不想使用结构更复杂的正则表达式,比如
/(.+)(,)(.+)(,)(.+)(,)(.+)/g
希望用逗号符号对单词进行分组,但无法为其选择正确的正则表达式,所以我使用递归子字符串搜索,并在for循环中进行匹配。我做得对吗,或者有一个正则表达式适合我,但我还没有找到它。谢谢。您可以使用以下模式:
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);
不要使用正则表达式,使用一个。这可能是一个固执己见的问题,但在这种情况下,我也会避免使用正则表达式,因为你最终会得到一个最多难以阅读的东西,最坏的情况是一个可维护性的噩梦。
replace(/(.+)(,)(.+)/g,“'comma'”
似乎不清楚。为什么要用逗号替换?最好使用支持正则表达式的拆分函数。哦,我忘了这一点。。为什么使用此([^\s,][^,]*)
而不是([^\s,]+)
?@AvinashRaj:这只是为了确保第一个字符不是空白,并修剪可能的前导空格(因为每个,
后面都有空格)。