【发布时间】:2009-01-06 13:01:49
【问题描述】:
在 Javascript 中,我定义了一个正则表达式,现在用户正在输入一个字符串。我想告诉他,如果他继续打字或者他已经走错了路,他的字符串是否仍然可以匹配正则表达式。例如:
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 正则表达式是否匹配任何单词或是否为空?
【问题讨论】:
标签: javascript regex prefix