Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对regex模式进行反向工程,以查找令牌的数量和预期匹配的长度_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 对regex模式进行反向工程,以查找令牌的数量和预期匹配的长度

Javascript 对regex模式进行反向工程,以查找令牌的数量和预期匹配的长度,javascript,jquery,regex,Javascript,Jquery,Regex,为了验证表单中的某些字段,我需要找到特定正则表达式指定的标记数,以及该正则表达式指定的匹配长度。比如说, 对于模式[0-9]{3}[0-9]{2},我需要找到5表示长度,2表示令牌数 对于模式[0-9]{2}/[0-9]{2}/[0-9]{4},我需要找到8表示长度,3表示令牌数 有人能指出这样做的方向吗?虽然您没有要求用regex解决这个问题,但我们会的。在正则表达式上运行的正则表达式!那是regex广场吗 乍一看,这项任务听起来很复杂。我们是否需要编写正则表达式引擎来解析表达式 幸运的是,如

为了验证表单中的某些字段,我需要找到特定正则表达式指定的标记数,以及该正则表达式指定的匹配长度。比如说,

  • 对于模式
    [0-9]{3}[0-9]{2}
    ,我需要找到5表示长度,2表示令牌数
  • 对于模式
    [0-9]{2}/[0-9]{2}/[0-9]{4}
    ,我需要找到8表示长度,3表示令牌数

  • 有人能指出这样做的方向吗?

    虽然您没有要求用regex解决这个问题,但我们会的。在正则表达式上运行的正则表达式!那是regex广场吗

    乍一看,这项任务听起来很复杂。我们是否需要编写正则表达式引擎来解析表达式

    幸运的是,如果您的量词都在
    {curlies}
    中,那么有一个简单的解决方案。如果我们匹配卷曲之间的所有数字,匹配的数量将是标记的数量,长度将是匹配的总和

    我们的简单正则表达式

    {(\d+)}
    
    好的,但是我们如何在代码中实现它呢?

    下面是一个完整的脚本,它输出令牌的数量和长度。请参阅测试结果

    
    var subject='[0-9]{2}/[0-9]{2}/[0-9]{4}';
    var regex=/{(\d+)}/g;
    var group1Caps=[];
    var match=regex.exec(主题);
    //将组1捕获放置在阵列中
    while(匹配!=null){
    如果(匹配[1]!=null)group1Caps.push(匹配[1]);
    match=regex.exec(主题);
    }
    //有多少代币?
    文档。写入(“***令牌数***
    ”); 文件写入(分组1卷长度); //预期的匹配长度是多少? var计数器=0; 文档。写入(“
    ***预期匹配的长度***
    ”; 如果(group1Caps.length>0){ 对于(组1caps中的键)计数器+=parseInt(组1caps[key]); } 文件。写入(计数器“
    ”)
    FYI Kleber,在我的答案中添加了示例js代码和在线演示。
    <script>
    var subject = '[0-9]{2}/[0-9]{2}/[0-9]{4}';
    var regex = /{(\d+)}/g;
    var group1Caps = [];
    var match = regex.exec(subject);
    
    // Place Group 1 captures in an array
    while (match != null) {
        if( match[1] != null ) group1Caps.push(match[1]);
        match = regex.exec(subject);
    }
    
    // How many tokens are there?
    document.write("*** Number of Tokens ***<br>");
    document.write(group1Caps.length);
    
    // What length are the expected matches?
    var counter = 0;
    document.write("<br>*** Length of Expected Matches ***<br>");
    if (group1Caps.length > 0) {
       for (key in group1Caps) counter += parseInt(group1Caps[key]);
       }
    document.write(counter,"<br>")   
    </script>