反向工程regex模式以查找令牌数和预期匹配长度

时间:2014-05-26 23:54:18

标签: javascript jquery regex

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

  1. 使用模式[0-9]{3},[0-9]{2},我需要找到5的长度和2的令牌数。
  2. 使用模式[0-9]{2}/[0-9]{2}/[0-9]{4},我需要找到8个长度和3个令牌数。
  3. 任何人都可以指出这样做的方向吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

我们简单的正则表达式

{(\d+)}

好的,但我们如何在代码中实现这一点?

这是一个完整的脚本,输出令牌的数量和长度。查看online demo的结果。

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