在曾经是列表的拆分字符串之后,我将这样做:
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"]
发布于 2016-09-13 11:22:56
对于一种简单的方法,您可以使用.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
,它是对我们匹配的数字的反向引用,从而在数字之后删除空格和逗号。发布于 2016-09-13 11:04:59
您可以使用交替运算符来匹配一对数字(将它们捕获为单独的捕获组)或单个数字:
/\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g
详细信息
\((-?\d+), (-?\d+)\)
-一个(
,一个数字(捕获到第1组),一个,
,空格,另一个数字(捕获到第2组)和一个)
|
-或\((-?\d+)\)
-一个(
,然后是一个数字(被捕获到第3组中)和一个)
。
var re = /\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g;
var str = '((3158), (737)) ((3158, 1024), (737))';
var res = [];
while ((m = re.exec(str)) !== null) {
if (m[3]) {
res.push(m[3]);
} else {
res.push(m[1]+m[2]);
}
}
console.log(res);
https://stackoverflow.com/questions/39477126
复制相似问题