【问题标题】:Splitting a comma-separated string but ignoring commas between semicolons using JavaScript使用 JavaScript 拆分逗号分隔的字符串但忽略分号之间的逗号
【发布时间】:2019-03-29 13:20:53
【问题描述】:

所以我有这个字符串:

apple;banana;orange, kiwi;onion,strawberry, avocado

上面的字符串应该分成:

   apple
   banana
   orange, kiwi
   onion
   strawberry
   avocado

我找到了一个正则表达式函数,但它只拆分双引号“”

   str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

我试图用 ; 替换 " " ;

   str.split(",(?=(?:[^\;]*\;[^\;]*\;)*[^\;]*$)");

但是当我替换为 ; 时它不起作用

【问题讨论】:

  • 您确定想要的结果吗?
  • 橙子和猕猴桃没有分开听起来很奇怪。这是一个奇怪的拆分标准。
  • @NinaScholz 是的,我敢肯定,类似的问题但带有双引号 stackoverflow.com/questions/18893390/…
  • 最后一个'onion,strawberry, avocado' 部分的规则是什么。为什么这部分用逗号分隔而这个part 'orange, kiwi' 不是?
  • @NinaScholz orangekiwi 之间的逗号位于两个分号之间,必须根据标题忽略。不适合这种情况的逗号应该拆分数组。

标签: javascript arrays regex sorting


【解决方案1】:

如果后面没有分号,你可以用分号或逗号分隔。

var string = 'apple;banana;orange, kiwi;onion,strawberry, avocado',
    array = string.split(/;\s*|,\s*(?!.*;)/);

console.log(array);

【讨论】:

  • 当我在鳄梨的末尾添加一个分号时,这很奇怪,例如苹果;香蕉;橙子,猕猴桃;洋葱,草莓,鳄梨;输出是正确的,但最后它向数组添加了空字符串,如何忽略结束分号? [“苹果”、“香蕉”、“橙子、猕猴桃”、“洋葱”、“草莓”、“鳄梨”、“”]
  • 在这种情况下,拆分按预期工作,您可以添加一个过滤器来删除空字符串,例如.filter(Boolean)
  • 如果您希望忽略末尾的分号,请遵循@NinaScholz 的回答 string.split(/;\s*|,\s*(?!.*;)/).filter(Boolean)感谢您的回答 NinaScholz
【解决方案2】:

const str = 'apple;banana;orange, kiwi;onion,strawberry, avocado';

console.log(
  str
  
    // split at each semicolon
    .split(';')
    
    // split at each comma, only for the first and last elements
    .map((x,i,arr) => (i==0 || i==arr.length-1) ? x.split(',') : [x])
    
    // merge the arrays
    .reduce((acc, cur) => [...acc, ...cur], [])

    // trim for clean result
    .map(x => x.trim())
    
)

【讨论】:

  • 这就像写下您的预期输出。为什么我会为此编写代码。
  • @AZ_ 我似乎没有理解您的评论。请添加更多解释。
猜你喜欢
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2020-08-03
  • 2012-05-23
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多