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>