在Javascript中,我定义了一个正则表达式,现在用户正在键入一个字符串。我想告诉他,如果他的字符串仍然可以匹配RegExp,如果他继续打字或者他已经走错了路。例如:检查字符串是否是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正则表达式匹配任何单词或者它是空的?
你应该仔细阅读这个问题。它不会问如何调用匹配器。它询问如何编写匹配器。 – user51568 2009-01-06 14:03:47