首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >智能判读理解输入

智能判读理解输入
EN

Stack Overflow用户
提问于 2016-09-13 18:55:24
回答 2查看 71关注 0票数 1

曾经是列表的拆分字符串之后,我将这样做:

代码语言:javascript
代码运行次数:0
运行
复制
console.log(lines[line]);
var regex = /(-?\d{1,})/g;
var cluster = lines[line].match(regex);
console.log(cluster);

这会给我这样的印象:

代码语言:javascript
代码运行次数:0
运行
复制
((3158), (737))
["3158", "737"]

其中,3158将被视为我的程序中的ID,而737将被视为相关的数据。

我想知道是否也有办法处理这类投入:

代码语言:javascript
代码运行次数:0
运行
复制
((3158, 1024), (737))

其中ID将是一对,并执行如下操作:

代码语言:javascript
代码运行次数:0
运行
复制
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

这有可能吗?

澄清:

我感兴趣的是区别对待这两起案件。例如,一种解决方案是具有以下行为:

代码语言:javascript
代码运行次数:0
运行
复制
((3158), (737))
["3158", "737"]

对于对,连接ID

代码语言:javascript
代码运行次数:0
运行
复制
((3158, 1024), (737))
["31581024", "737"]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-13 19:22:56

对于一种简单的方法,您可以使用.replace(/(\d+)\s*,\s*/g, '$1')对数字进行合并/连接,然后使用已经使用的简单正则匹配。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
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中使用这个正则表达式

代码语言:javascript
代码运行次数:0
运行
复制
/(\d+)\s*,\s*/
  • 它匹配和分组1或更多位数,后面跟着可选空格和逗号。
  • 在替换中,我们使用$1,它是对我们匹配的数字的反向引用,从而在数字之后删除空格和逗号。
票数 2
EN

Stack Overflow用户

发布于 2016-09-13 19:04:59

您可以使用交替运算符来匹配一对数字(将它们捕获为单独的捕获组)或单个数字:

代码语言:javascript
代码运行次数:0
运行
复制
/\((-?\d+), (-?\d+)\)|\((-?\d+)\)/g

regex演示

详细信息

  • \((-?\d+), (-?\d+)\) -一个(,一个数字(捕获到第1组),一个,,空格,另一个数字(捕获到第2组)和一个)
  • | -或
  • \((-?\d+)\) -一个(,然后是一个数字(被捕获到第3组中)和一个)

代码语言:javascript
代码运行次数:0
运行
复制
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);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39477126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档