为了验证表单中的某些字段,我需要找到特定正则表达式指定的标记数,以及该正则表达式指定的匹配项的长度。例如,
- 对于模式
[0-9]{3},[0-9]{2}
,我需要找到 5 个长度和 2 个 token 数。 - 对于模式
[0-9]{2}/[0-9]{2}/[0-9]{4}
,我需要找到 8 的长度和 3 的数量代币。
任何人都可以指明方向吗?
最佳答案
虽然您没有要求用正则表达式解决这个问题,但我们会的。在正则表达式上运行的正则表达式!那是正则表达式吗?
乍一看,这项任务听起来很复杂。我们是否需要编写一个正则表达式引擎来解析您的表达式?
幸运的是,如果您的量词都在 {curlies}
中,则有一个简单的解决方案。如果我们匹配 curlies 之间的所有数字,匹配的数量将是标记的数量,长度将是匹配的总和。
我们简单的正则表达式
{(\d+)}
好的,但我们如何在代码中实现它?
这是一个完整的脚本,可以输出 token 的数量和长度。查看 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>
关于javascript - 逆向工程正则表达式模式以查找 token 数和预期匹配的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879147/