En Javascript he definido una expresión regular y ahora un usuario está escribiendo una cadena. Quiero decirle si su cadena todavía podría coincidir con RegExp si continúa escribiendo o si ya está en el camino equivocado. Por ejemplo:Compruebe si string es un prefijo de un Javascript RegExp
var re = /a*b/;
"a".isPrefixOf(re); // true
"x".isPrefixOf(re); // false
¿Cómo es posible una implementación de isPrefixOf
parece?
Actualización: Gracias por sus respuestas, hacer la expresión regular a prueba de prefijos, como lo sugiere brad, parece ser una buena solución. Pero todavía estoy tratando de encontrar una solución general.
Quizás de esta manera: Creamos una nueva expresión regular con la entrada del usuario seguida de .*
. Esta expresión regular describe todas las palabras que el usuario aún puede ingresar. Si la intersección de esta expresión regular creada y la expresión regular original está vacía, entonces el usuario ya está en el camino equivocado. Si no es así, él está bien. Por ejemplo:
var re = /a*b/;
var sInput = "a";
var reInput = new RegExp(sInput + ".*");
reIntersection = re.intersect(reInput);
reIntersection.isEmpty(); // false
intersect()
devuelve una nueva expresión regular que sólo acepta palabra que tanto re
y reInput
aceptarían. La función no existe todavía, pero podemos hacerlo operativo de preanálisis:
RegExp.prototype.intersect = function(pattern2) {
return new RegExp('(?=' + this.source + ')' + pattern2.source);
}
Lo que queda abierta es la función isEmpty()
. ¿Cómo podríamos comprobar si una expresión regular de JavaScript coincide con una palabra o si está vacía?
Debe leer la pregunta con más cuidado. No pregunta cómo llamar al emparejador. Pregunta cómo escribir el marcador. – user51568