javascript - 使用 RandExp 生成基于正则表达式的字符串

标签 javascript regex string

我需要基于正则表达式生成一个字符串,该字符串将生成随机字母和数字,以及 36 个字符的字符串中随机位置的 4 个破折号。

示例:

123A5678-01B3C5F7-901R345-789F1-3456

我已经找到了一个正则表达式,它似乎可以很好地验证给定的字符串:

(?=.{36}$)([0-9A-Z]+-){4}([0-9A-Z])+

...但是使用相同的方法在 RandExp 中生成字符串最终会变得一团糟。它生成 36 个字符的字符串并添加 5 个随机长度的组:

new RandExp(/(?=.{36}$)([0-9A-Z]+-){4}([0-9A-Z])+/).gen()

M78QMOC6OGIF5OAJAJCG68CQWJGT5FX43CTKZ9CS9GXWLEKUKZMG602U5HPR4CEKO7OIX45CMLB7DS5RHZBI8KE8HGO9ET6OWS9A-PQSHN9E36KIMW328A1L0BHXCFOJVCD2ZT11-KD03XTZ375WP 7CR7YSF4CTSX-0FBJ3MZ4RNDLA5UZOHI5QWVY66PTUDDRCG-OH4F688VM1

我是否应该使用类似以下内容的字符串来满足固定宽度组:

([0-9A-Z]{6}-){4}[0-9A-Z]{8}

...或者有什么方法可以改进原始的正则表达式吗?

最佳答案

似乎不可能使用 Randexp 来限制前瞻的整个字符串长度。 . 我也尝试过您的模式,它会生成一个包含任何类型的 n 个字符的字符串,例如 $>Qa MG4XT@#j{3#&[+V4= ^“VQLI*|b%bp~@ (1)。

当你应用 anchor 时,更奇怪的是,new RandExp(/^(?=.{36}$)(?:[0-9A-Z]+-){4}[0-9A -Z]+$/) 还将在字符串开头生成约 30 个各种类型的字符。这可能与最终模式位置未使用 $ 并被忽略有关(请参阅 Bad Regular Expressions )。 对我来说这看起来像是一个错误

删除前瞻并在开头添加 ^ 字符串开始 anchor 和在末尾添加 $ 字符串结束 anchor 可以生成更好的字符串( 2)。但是,您可能确实只想使用固定长度组 (3)。

document.body.innerHTML = "(1) " + new RandExp(/(?=.{36}$)([0-9A-Z]+-){4}([0-9A-Z])+/).gen();
document.body.innerHTML += "<br/><br/>(2)&nbsp;" + new RandExp(/^(?:[0-9A-Z]+-){4}[0-9A-Z]+$/).gen();
document.body.innerHTML += "<br/><br/>(3)&nbsp;" + new RandExp(/^(?:[0-9A-Z]{6}-){4}[0-9A-Z]{8}$/).gen();
<script src="https://github.com/fent/randexp.js/releases/download/v0.4.1/randexp.min.js"></script>

然后,您可以尝试使用 /^(?:[0-9A-Z]{6,8}-){4}[0-9A-Z]{6,8 来解决该问题}$/ 正则表达式在循环中,仅当字符串长度为 36 个字符时才返回结果:

var rdx = new RandExp(/^(?:[0-9A-Z]{6,8}-){4}[0-9A-Z]{6,8}$/);
var res = rdx.gen();
while (res.length !== 36) {
    res = rdx.gen();
}
document.body.innerHTML = res;
<script src="https://github.com/fent/randexp.js/releases/download/v0.4.1/randexp.min.js"></script>

关于javascript - 使用 RandExp 生成基于正则表达式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363736/

相关文章:

string - 非常奇怪的列字符串 "single-quote-comment-brace-time-char"- postgres 选择中的错误替换 - 可能仅与 JDBC 相关

python - 如何在数据框列中的特定字符之后提取整个字符串部分?

javascript - ajax GET 函数在被另一个函数调用时不返回成功值

python - 这个序列 '[[A-Z][a-z]]' 在 python 的正则表达式中意味着什么?

python - RegEX:如何在字符串之间排除并匹配重命名字符串

javascript - 在 Javascript 中使用正则表达式验证电子邮件地址和文件夹

java - 如何使用 Matcher 正确替换字符串中出现的所有模式

javascript - jQuery dataTables - 添加行不起作用

javascript - 未捕获的 DOMException : Failed to execute 'toDataURL' on 'HTMLCanvasElement' : Tainted canvases may not be exported

javascript - 如何在元素上设置默认 focus()