假设我有这个正则表达式:/abcd/ 假设我想根据该正则表达式检查用户输入并禁止在输入中输入无效字符。当用户输入“ab”时,它无法匹配正则表达式,但我不能禁止输入“a”然后输入“b”,因为用户不能一次输入所有 4 个字符(复制/粘贴除外)。所以我在这里需要的是部分匹配,它检查不完整的字符串是否可能与正则表达式匹配。
Java 有一些用于此目的的东西: .hitEnd()
(在此处描述 http://glaforge.appspot.com/article/incomplete-string-regex-matching )python 本身并不这样做,但有这个包可以工作: https ://pypi.python.org/pypi/regex。
我没有在js中找到任何解决方案。几年前有人问过: Javascript RegEx partial match 甚至在那之前: Check if string is a prefix of a Javascript RegExp
PS 正则表达式是自定义的,假设用户自己输入正则表达式,然后尝试输入与该正则表达式匹配的文本。该解决方案应该是适用于在运行时输入的正则表达式的通用解决方案。
原文由 Sassan 发布,翻译遵循 CC BY-SA 4.0 许可协议
看起来你很幸运,我已经在 JS 中实现了这些东西(适用于 大多数 模式——也许这对你来说就足够了)。 在这里查看我的回答。您还可以在那里找到一个工作演示。
完整的代码这里就不赘述了,我只说一下整个过程:
RegExp
对象中不能有无效模式。abc
替换为(?:a|$)(?:b|$)(?:c|$)
[a-c]
将变为(?:[a-c]|$)
如果 JavaScript 具有更高级的正则表达式功能,则可能无法进行这种转换。但由于其有限的功能集,它可以处理大多数输入正则表达式。如果您的输入字符串在反向引用匹配的中间结束(例如匹配
^(\w+)\s+\1$
对hello hel
), 它将 在具有反向引用的正则表达式上产生不正确的结果。