正则表达式获取字符串直到它命中逗号

时间:2013-07-12 10:12:44

标签: regex

假设我有一个这样的字符串:"1367,14,243,540"(总是有4个数字,只有数字,没有小数位,总是用逗号分隔)

正则表达式应该如何允许我从字符串中选择/过滤/返回让我们说243

4 个答案:

答案 0 :(得分:3)

如果你坚持使用正则表达式/\d+/g(这里是js中的多个选项,使用与Microsoft框架的匹配),这里是你的正则表达式虽然你可以使用split(例如使用js):

var v='123,333,445,67';

console.log('split:');
console.log(v.split(',').map(function(n){return parseInt(n);}));

console.log('\nregex:');
console.log(v.match(/\d+/g).map(function(n){return parseInt(n);}));

<强> jsfiddle

数字将以数组形式返回,您可以使用索引访问所需的数字,假设为2。

注意:split比regex快,你可以使用jsperf.com测试性能差异

修改:对于对效果差异感兴趣的人, check this link

note2:这里的map只是用于将字符串解析为整数,如果要将它们保存为字符串,可以将其删除。

答案 1 :(得分:1)

^([[:digit:]]+,){2}([[:digit:]]+)

您想要的号码在捕获组#2中。

答案 2 :(得分:1)

正如其中一条评论所说,在这种情况下你不应该真正使用正则表达式。总是尝试使用适当的工具来完成工作,在这种情况下,正则表达式是巨大的过度杀伤。

您的问题很容易解决,

$sourceString = "1367,14,243,540";
$numbers = explode(",", $sourceString);
$neededNumber = $numbers[2];

答案 3 :(得分:0)

您只需要描述您的字符串:

^(\d+,){2}(\d+)

“从一开始,数字后跟逗号出现两次,然后是另一个数字。”
您可以选择第二组的编号,即\ 2或$ 2.