我有以下输入字符串:
02:00:00_03:00:00_1234@someemail.or.domain.com
或者这个:
02:00:00_03:00:00_mtwrf_1234@someemail.or.domain.com
我正在尝试编写一个匹配两者的javascript正则表达式。 “ mtwrf ”是可选的...它可能存在也可能不存在于输入中。
我一直在用这个网站测试: http://www.regexpal.com/
这种模式:
(\d\d\:\d\d:\d\d\_){2}([mtwrfsn\_]*)([\w\d]+\@?[\w\d\.]+)
似乎按照regexpal.com网站使用输入字符串工作:
02:00:00_03:00:00_mtw_1234@test.domain.com
但是......当我把它插入我的代码时...它不匹配/找到“02:00:00”。
这是我的javascript代码:
var pattern = /(\d\d\:\d\d:\d\d\_){2}([mtwrfsn\_]*)([\w\d]+\@?[\w\d\.]+)/;
if (rules_array[i].length > 0) {
searchval = rules_array[i].match(pattern);
}
console.log(searchval);
我得到的输出是:
[ '02:00:00_03:00:00_1234@test.domain.com',
'03:00:00_',
'',
'1234@test.domain.com',
index: 0,
input: '02:00:00_03:00:00_1234@test.domain.com' ]
我想我应该看到这样的事情:
[ '02:00:00_03:00:00_1234@test.domain.com',
'02:00:00_',
'03:00:00_',
'1234@test.domain.com',
index: 0,
input: '02:00:00_03:00:00_1234@test.domain.com' ]
你能看到我的错误/问题在哪里吗? 谢谢。
答案 0 :(得分:0)
您遇到的问题与重复捕获群组有关,请参阅How to capture an arbitrary number of groups in JavaScript Regexp?。
但是,您的案例的解决方案是拼出第二次捕获组的值:
var sp="10,20,30"; //get your field values here
var sop="5,10,15";
var spArr = sp.split(','); //split the values using comma
var sopArr = sop.split(',');
if(spArr.length === sopArr.length){
for(var i in spArr){
if(parseInt(spArr[i])<parseInt(sopArr[i])){
//throw some error or your logic goes here.
}
}
}
产生
var pattern = /(\d\d\:\d\d:\d\d_)(\d\d\:\d\d:\d\d_)([mtwrfsn_]*)(\w+?[\w.]+)/;
var searchval = "02:00:00_03:00:00_mtw_1234@test.domain.com".match(pattern);
console.log(searchval);
可能会进一步缩短模式,只需注意[
"02:00:00_03:00:00_mtw_1234",
"02:00:00_",
"03:00:00_",
"mtw_",
"1234"
]
= [\w\d]
,因为\w
匹配数字以及\w
。