关注Split string that used to be a list,我这样做:
console.log(lines[line]);
var regex = /(-?\d{1,})/g;
var cluster = lines[line].match(regex);
console.log(cluster);
这会给我这个:
((3158), (737))
["3158", "737"]
其中3158将被视为我程序中的ID,737将被视为相关数据。
我想知道是否有办法对待这类投入:
((3158, 1024), (737))
其中ID将是一对,并执行以下操作:
var single_regex = regex_for_single_ID;
var pair_regex = regex_for_pair_ID;
if(single_regex)
// do my logic
else if(pair_regex)
// do my other logic
else
// bad input
这可能吗?
澄清:
我感兴趣的是以不同方式对待这两种情况。例如,一种解决方案是具有此行为:
((3158), (737))
["3158", "737"]
对于对,连接ID :
((3158, 1024), (737))
["31581024", "737"]
答案 0 :(得分:2)
您可以使用交替运算符来匹配一对数字(将它们捕获到单独的捕获组中)或单个数字:
/\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g
请参阅regex demo
详细:
\((-?\d+), (-?\d+)\)
- 一个(
,一个数字(捕获到第1组),一个,
,空格,另一个数字(捕获到第2组)和一个{{1 }} )
- 或|
- \((-?\d+)\)
,然后是数字(捕获到第3组)和(
。
)
答案 1 :(得分:2)
简单来说,您可以使用.replace(/(\d+)\s*,\s*/g, '$1')
合并/连接数字对,然后使用您已经使用的简单正则表达式匹配。
示例:强>
var v1 = "((3158), (737))"; // singular string
var v2 = "((3158, 1024), (737))"; // paired number string
var arr1 = v1.replace(/(\d+)\s*,\s*/g, '$1').match(/-?\d+/g)
//=> ["3158", "737"]
var arr2 = v2.replace(/(\d+)\s*,\s*/g, '$1').match(/-?\d+/g)
//=> ["31581024", "737"]
我们在.replace
中使用此正则表达式:
/(\d+)\s*,\s*/
$1
作为我们匹配的数字的后向引用,从而删除数字后的空格和逗号。