在 Javascript 中,我定义了一个正则表达式,现在用户正在输入一个字符串。我想告诉他,如果他继续打字或者他已经走错了路,他的字符串是否仍然可以匹配正则表达式。例如:
var re = /a*b/;
"a".isPrefixOf( re ); // true
"x".isPrefixOf( re ); // false
一个实现isPrefixOf
看起来如何?
更新:感谢您的回答,按照布拉德的建议,使正则表达式前缀证明似乎是一个很好的解决方法。但我仍在努力寻找一个通用的解决方案。
也许是这样:我们创建一个新的正则表达式,用户输入后跟.*
. 这个正则表达式描述了用户仍然可以输入的所有单词。如果这个创建的正则表达式和原始正则表达式的交集是空的,那么用户已经走错路了。如果不是,他过得很好。例如:
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 正则表达式是否匹配任何单词或者它是否为空?