使用JavaScript(node.js)实现"反向"正则表达式

6
使用类似于/\w/的正则表达式,我可以匹配像aq这样的字符串。在JS中是否有生成与某些正则表达式匹配的所有字符串的惯用方式呢?
不要考虑无限的情况。我只想简要描述一些可能的字符集。
为了代替以下代码段: var s = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'

3
这是一个难以解决的问题。因为存在无限数量的正则表达式可以匹配无限数量的字符串(例如 /a+/)。 - Jozef Legény
那个程序将非常容易地不再停止,只需要一个\w+就可以生成“无限”的字符串。 - crackmigg
2
有一个PHP库试图做到这一点。 - A1rPun
2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Wiktor Stribiżew
1
另一个链接(regldg):这是一个基于C语言的解决方案,可供下载,并作为网络服务(输出大小受限)在线测试功能。我与该项目没有任何关联。 - collapsar
显示剩余4条评论
1个回答

9
你可以尝试使用 randexp

Randexp 将生成一个匹配给定的正则表达式 JavaScript 对象的随机字符串。

请查看演示:

document.body.innerHTML = new RandExp(/\w/).gen();
document.body.innerHTML += "<br/>" + new RandExp(/\w/).gen();
document.body.innerHTML += "<br/>" + new RandExp(/[for]{3}/).gen();
document.body.innerHTML += "<br/>" + new RandExp(/I like (cats|dogs|mice)/).gen();
<script src="https://github.com/fent/randexp.js/releases/download/v0.4.1/randexp.min.js"></script>


你需要生成任意文本块并针对正则表达式进行测试。我认为现在不可能做到,你得等很久。为什么你需要获取所有可能的变体?你只需要用于测试,是吧? - Wiktor Stribiżew
再次强调,这是不可能的。 - Wiktor Stribiżew
为什么?我不需要描述无限的情况。我只需要说/[\w\{\}}]/,而不是像这样写字符串abcdef ..... {} - kharandziuk
1
那么,是什么阻止你手动编写/[\w{}]/呢?正则表达式的目的是提取符合特定模式的字符串,而不是反过来。反过来的方式是测试正则表达式,我认为我的答案可以满足这个目的。 - Wiktor Stribiżew
我的意思是,按照你想要的方式使用正则表达式并不是正则表达式的本意。当我说“这是不可能的”时,我的意思是重构正则表达式解析器(虽然可行),并尝试使用Unicode集合生成所有子字符串并不容易。仅仅这一点就需要大量的工作,而且如果没有相当的努力,这对于这个问答网站来说是一个相当广泛的话题。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接