regex 如何从逗号分隔和空格字符串中选择所有数字?

ni65a41a  于 2023-04-22  发布在  其他
关注(0)|答案(4)|浏览(90)

如何从下面的字符串中选择所有数字?
str = "1,2, 4,5 ,6 7 8 9 10, 11, 13"
我尝试使用split(','),但它不适用于空格。
因为它也包含空格。

r6hnlfcb

r6hnlfcb1#

只要做一个正则表达式,在数字上进行匹配

console.log("1,2, 4,5 ,6 7 8  9 10, 11, 13".match(/\d+/g).map(Number));
wlp8pajw

wlp8pajw2#

splitcan take a regular expression。所以你可以给予它一个正则表达式,它可以健壮地定义你的定界语法。(...这可能是类似的,但对于阅读这个问题的其他人来说略有不同,这就是为什么我提供这个答案。)
我猜想你实际上会希望允许最多1个逗号,前后有可选的空格,1个或更多的空格。但例如,我猜想你不会将两个或更多的逗号解释为单个分隔符,而更可能是输入文本中的错误。例如,可能需要将1,,2解释为[1, 0, 2]。(毕竟,在JavaScript中,Number("")0)。这完全取决于你自己选择的语法。
这样的正则表达式可以是:
(?:\s*,\s*)|\s+
这里发生了很多事情:

  • 当你使用正则表达式进行分割时,捕获的组被保存在输出中,所以你必须使用一个?:非捕获组。
  • 在交替(|)结构中,\s*,\s*必须出现在\s+之前,因为它需要被贪婪地匹配以形成更长的分隔符(如果有分隔符,则在分隔符中包括逗号,而不仅仅是它之前的空格)。
  • 这应该适用于3.14-11.21e90x42Infinity等数字。
console.log("1,2, 4,5 ,6 7 8  9 10, 11, 13".split(/(?:\s*,\s*)|\s+/).map(Number));

如果您确实希望,,是单个分隔符,则正则表达式可以仅为[,\s]+

wljmcqd8

wljmcqd83#

不使用正则表达式:

string str = "1,2, 4,5 ,6 7 8  9 10, 11, 13";
List<string> list = str.Replace(" ", ",").Split(',').ToList();
list.RemoveAll(x => x == string.Empty);

列表包含:1,2,4,5,6,7,8,9,10,11,13

vsnjm48y

vsnjm48y4#

你能做的
.replace(/\D/g,'');

相关问题