javascript正则表达式 - 无法获得正确的模式

时间:2016-10-20 13:44:00

标签: javascript regex

我有以下输入字符串:

  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' ]

你能看到我的错误/问题在哪里吗? 谢谢。

1 个答案:

答案 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