当前位置:  开发笔记 > 编程语言 > 正文

检查string是否是Javascript RegExp的前缀

如何解决《检查string是否是JavascriptRegExp的前缀》经验,为你挑选了1个好方法。

在Javascript中,我定义了一个正则表达式,现在用户正在键入一个字符串.我想告诉他,如果他的字符串仍然可以与RegExp匹配,如果他继续打字或者他已经走错了路.例如:

var re = /a*b/;

"a".isPrefixOf( re ); // true
"x".isPrefixOf( re ); // false

一个实现isPrefixOf怎么样?

更新:感谢您的回答,正如brad建议的那样使正则表达式前缀保证似乎是一个很好的解决方法.但我仍在努力找到一个通用的解决方案.

也许这样:我们创建一个新的正则表达式,后跟用户输入.*.此正则表达式描述了用户仍可输入的所有单词.如果此创建的正则表达式与原始正则表达式的交集为空,则表示用户已经错误.如果不是,他表现得很好.例如:

var re = /a*b/;
var sInput = "a";
var reInput = new RegExp( sInput + ".*" );

reIntersection = re.intersect( reInput );
reIntersection.isEmpty(); // false

intersect()返回只接受这两个词一个新的正则表达式re,并reInput会接受.该功能尚不存在,但我们可以使用预测来实现它:

RegExp.prototype.intersect = function( pattern2 ) { 
    return new RegExp( '(?=' + this.source  + ')' + pattern2.source );
}

剩下的就是isEmpty()功能.如果Javascript正则表达式匹配任何单词或它是否为空,我们如何检查?



1> Alan Moore..:

人们在如何解释这个问题上似乎分歧很大,因此我将通过Java示例来演示该概念。

import java.util.regex.*;

public class Test
{

  public static void main(String[] args) throws Exception
  {
    tryMatch("^a*b+$", "a", "ab", "abc");
  }

  public static void tryMatch(String regex, String... targets)
  {
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher("");
    System.out.printf("%nregex: %s%n", regex);
    System.out.printf("target | matches() | hitEnd()%n");
    for (String str : targets)
    {
      m.reset(str);
      System.out.printf("%-6s | %-9B | %-9B%n",
          str, m.matches(), m.hitEnd());
    }
  }
}

输出:

regex: ^a*b+$
target | matches() | hitEnd()
a      | FALSE     | TRUE
ab     | TRUE      | TRUE
abc    | FALSE     | FALSE

目标字符串“ a”不匹配,因为正则表达式至少需要一个b,但是它可以是成功匹配的前缀,因此hitEnd()返回true。字符串“ ab”具有匹配所需的所有内容,但是如果我们b在结尾添加更多的内容,它也将匹配,因此hitEnd()仍会返回true。使用“ abc”时,匹配尝试在到达目标字符串的末尾之前会失败,因此正则表达式无法匹配任何以“ abc”开头的字符串。

据我所知,Javascript没有Java的hitEnd()方法,但是可能会伪造它。如果有人知道,那将是公然的 Badass,Steven Levithan。

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有