Javascript 理解输入的智能正则表达式

Javascript 理解输入的智能正则表达式,javascript,html,regex,string,io,Javascript,Html,Regex,String,Io,下面,我正在这样做: 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将是

下面,我正在这样做:

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:


您可以使用交替运算符来匹配将其捕获到单独捕获组中的一对数字或单个数字:

/\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g

详情:

\-?\d+,-?\d+\-a,捕获到组1中的数字,a,,空格,捕获到组2和a中的另一对数字 |-或 \-?\d+\-a,然后将一个数字捕获到组3中,然后是a。 变量re=/\-?\d+,-?\d+\\\-?\d+\/g; var str='31587371581024737'; var-res=[]; 而m=re.execstr!==空的{ 如果m[3]{ res.pushm[3]; }否则{ res.pushm[1]+m[2]; } }
console.logres 您可以使用交替运算符来匹配将其捕获到单独捕获组中的一对数字或单个数字:

/\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g

详情:

\-?\d+,-?\d+\-a,捕获到组1中的数字,a,,空格,捕获到组2和a中的另一对数字 |-或 \-?\d+\-a,然后将一个数字捕获到组3中,然后是a。 变量re=/\-?\d+,-?\d+\\\-?\d+\/g; var str='31587371581024737'; var-res=[]; 而m=re.execstr!==空的{ 如果m[3]{ res.pushm[3]; }否则{ res.pushm[1]+m[2]; } }
console.logres 对于一种简单的方法,您可以使用.replace/\d+\s*,\s*/g,'$1'来合并/串联成对的数字,然后使用您已经使用的简单正则表达式匹配

例如:

我们在中使用此正则表达式。替换:

它匹配并分组1个或多个数字,后跟可选空格和逗号。 作为替换,我们使用$1作为对匹配数字的反向引用,从而删除数字后面的空格和逗号。
对于一种简单的方法,您可以使用.replace/\d+\s*,\s*/g,'$1'来合并/串联成对的数字,然后使用您已经使用的简单正则表达式匹配

例如:

我们在中使用此正则表达式。替换:

它匹配并分组1个或多个数字,后跟可选空格和逗号。 作为替换,我们使用$1作为对匹配数字的反向引用,从而删除数字后面的空格和逗号。
让我澄清一下,您希望得到一个3158102737的输入,并且您希望将31581024作为单个ID进行匹配,对吗?或者您希望将3158作为ID匹配,将1024作为ID匹配,并返回两个ID?单个或成对-?\d+?:\s*,\s*-?\d+?或-?\d+?\s*,\s*-?\d+?或-?\d+?\s*,\s*-?\d+?这取决于你想在数组中看到什么逗号,等等…vlaz更新了@嗯,对吗?我的意思是正则表达式就是你所有的代码吗?如果我使用var regex=…,这两种方法都会导致语法错误。。。;这是非常正确的。在JS中,你可以像切馅饼一样把它切成片,拿走你想要的。有很多方法可以做到这一点。使用分隔符:单或双/-?\d+?:\s*,\s*-?\d+?/或/-?\d+?\s*,\s*-?\d+?/或/-?\d+?\s*,\s*-?\d+?/这取决于您希望在数组中看到的逗号,等等。让我澄清一下,您希望获得3158、1024、737的输入,并且希望将3158、1024作为单个ID进行匹配,对吗?或者您希望将3158作为ID匹配,将1024作为ID匹配,并返回两个ID?单个或成对-?\d+?:\s*,\s*-?\d+?或-?\d+?\s*,\s*-?\d+?或-?\d+?\s*,\s*-?\d+?这取决于你想在数组中看到什么逗号,等等…vlaz更新了@嗯,对吗?我的意思是正则表达式就是你所有的代码吗?如果我使用var regex=…,这两种方法都会导致语法错误。。。;这是非常正确的。在JS中,你可以像切馅饼一样把它切成片,拿走你想要的。使用分隔符有很多种方法:单分隔符或双分隔符/-?\d+?:\s*,\s*-?\d+?/或/-?\d+?\s*,\s*-?\d+?/或/-?\d+?\s*,\s*-?\d+?/这取决于你想在数组中看到什么样的逗号,等等…Wiktor很棒,这会起作用,但有没有办法让res保存其他数据吗?那是737。因此,对于这个例子,它将给出[3158737]和[31581024737],而不是[3158]和[31581024]。是的,无论你推到那里。请根据您的需要随意调整代码。问题是,如果第3组匹配,如果m[3],我们知道我们有一个数字,否则,我们有第1组和第2组,你可以组合或做任何你想做的事情。Wiktor很好,这就可以了,但是有没有办法让res也保存其他数据?那是737。因此,对于这个例子,它将给出[3158737]和[31581024737],而不是[3158]和[31581024]。是的,无论你推到那里。请根据您的需要随意调整代码。问题是,如果第三组匹配,如果m[3],我们知道我们有一个单一的数字,否则,我们有第1组和第2组,你可以组合,或者做任何你想做的事情。太好了,那就行了。你能吗
请张贴正则表达式的解释?我正在努力理解他们并学习…:添加了.repalce函数的简要说明。对于match,我重复使用了你们已有的正则表达式。太好了,那会有用的。你们能发布正则表达式的解释吗?我正在努力理解他们并学习…:添加了.repalce函数的简要说明。对于match,我重复使用了你们已有的正则表达式。
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"]
/(\d+)\s*,\s*/