将字符串与正则表达式部分匹配

Sas*_*san 16 javascript regex

假设我有这个正则表达式:/ 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部分匹配 ,甚至在此之前:检查字符串是否是Javascript RegExp的前缀

PS正则表达式是自定义的,假设用户自己输入正则表达式然后尝试输入与该正则表达式匹配的文本.解决方案应该是适用于在运行时输入的正则表达式的通用解决方案.

Luc*_*ski 10

看起来你很幸运,我已经在JS中实现了这些东西(适用于大多数模式 - 也许这对你来说已经足够了).在这里看到我的答案.你还可以在那里找到一个有效的演示.

这里没有必要复制完整的代码,我只是说明整个过程:

  • 解析输入正则表达式,并执行一些替换.不需要错误处理,因为RegExp在JS 中的对象中不能存在无效模式.
  • 替换abc(?:a|$)(?:b|$)(?:c|$)
  • 对任何"原子"都这样做.例如,一个角色组[a-c]将成为(?:[a-c]|$)
  • 按原样保持锚点
  • 保持负面的前瞻

如果JavaScript具有更高级的正则表达式功能,那么这种转换可能是不可能的.但凭借其有限的功能集,它可以处理大多数输入正则表达式.它如果输入字符串中反向引用匹配(像匹配的中间结束,虽然产量与反向引用的正则表达式不正确的结果^(\w+)\s+\1$反对hello hel).