智能正则表达式理解输入
Intelligent regex to understand input
在过去是一个列表的分割字符串之后,我这样做:
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"]
对于一个简单的方法,您可以使用.replace(/('d+)'s*,'s*/g, '$1')
来合并/连接成对的数字,然后使用您已经使用的简单regex匹配。
例子:
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个或多个数字,后面跟着可选的空格和逗号。
- 在替换中,我们使用
$1
,这是我们匹配的数字的后引用,从而删除了数字后面的空格和逗号。
您可以使用交替操作符匹配一对数字(将它们捕获到单独的捕获组中)或单个数字:
/'((-?'d+), (-?'d+)')|'((-?'d+)')/g
查看regex演示
细节:
-
'((-?'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);
相关文章:
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 用于数字输入的正则表达式
- 在提交时检查正则表达式验证,如果为空,则聚焦所有输入字段
- 输入元素模式属性的Javascript正则表达式在reFiddle上有效,但在页面上无效
- 用于验证输入的JavaScript正则表达式超过0个字符
- 正则表达式,用于检查输入是否有字符或至少有1个笑脸
- 为什么我的正则表达式没有为我的文本输入返回正确的值
- Jquery 输入掩码在正则表达式中不可见
- AngularJS ng-pattern 函数,带有正则表达式和年份输入字段的日期
- 是否有可能/建议解析我的用户输入字符串 w 正则表达式
- 正则表达式不区分大小写,输入匹配
- 使用正则表达式进行输入验证
- HTML 正则表达式验证在十进制输入上仅限制一个句点
- 是否可以通过在 javascript 中使用正则表达式来计算具有输入年份出生的年龄
- 正则表达式 - 从文本输入中删除美元符号
- 正则表达式屏蔽输入
- 基于输入的正则表达式创建
- 是否可以在javascript中使用正则表达式检查输入中是否有多个特殊字符
- 输入正则表达式模式不工作
- 用户可以在其中输入正则表达式的输入表单