【问题标题】:Regex rules for comma separated list [duplicate]逗号分隔列表的正则表达式规则[重复]
【发布时间】:2020-12-12 08:00:14
【问题描述】:

我需要一个用于逗号分隔列表的字符串输入的正则表达式。我将列表从输入转换为数组,因此需要在输入时对其进行验证。现在我有这个/^([a-z0-9\s]+,)*([a-z0-9\s]+){1}$/i,它适用于大多数情况,但是当字符串末尾有逗号和空格时它不起作用。当我在其上运行数组拆分时,它会在逗号后使用空字符串并将其设置为空。这是可以在正则表达式端或 spliut 方法上完成的事情吗?这是我将逗号分隔的输入字符串转换为数组时:replace(/\s/g, '').split(',')

【问题讨论】:

  • 您不需要{1},因为这是默认设置。
  • 使用逗号作为分隔符拆分字符串,如果最后一个元素为空则删除。
  • 试试replace(/^[,\s]+|[,\s]+$|\s/g, '').split(',')
  • 这能回答你的问题吗? Regular expression help - comma delimited string

标签: javascript regex


【解决方案1】:

在可选空格、逗号、可选空格上拆分。如果需要,删除空数组项:

const input = [
  'aaa, bbb,ccc',
  'ddd, eee , fff, ',
  ', ggg, hhh, , iii'
];

input.forEach((str) => {
  let result1 = str.split(/ *, */);
  let result2 = result1.filter(Boolean);
  console.log('"' + str + '"');
  console.log('- result1: ' + JSON.stringify(result1));
  console.log('- result2: ' + JSON.stringify(result2));
});

输出:

"aaa, bbb,ccc"
- result1: ["aaa","bbb","ccc"]
- result2: ["aaa","bbb","ccc"]
"ddd, eee , fff, "
- result1: ["ddd","eee","fff",""]
- result2: ["ddd","eee","fff"]
", ggg, hhh, , iii"
- result1: ["","ggg","hhh","","iii"]
- result2: ["ggg","hhh","iii"]

解释:

  • / *, */- 分隔可选空格,后接逗号,后接可选空格
  • result1:显示拆分结果
  • result2:如果要删除空数组项,请使用.filter(Boolean) 过滤掉

如果要保留除末尾以外的空数组项,请在拆分前删除末尾的逗号:str.replace(/[, ]+/, '').split(/ *, */)

【讨论】:

  • @hernandeΩ:这能回答你的问题吗?如果没有,请告诉我。如果是这样,如果您接受答案,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多