В Javascript я определил регулярное выражение, и теперь пользователь вводит строку. Я хочу сказать ему, может ли его строка по-прежнему соответствовать RegExp, если он продолжает печатать или если он уже ошибается. Например:
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 соответствует любому слову или пустое?