Saltar al contenido

RegEx: coincidencia más pequeña posible o coincidencia no codiciosa

Siéntete en la libertad de divulgar nuestros tutoriales y códigos en tus redes sociales, necesitamos tu ayuda para aumentar esta comunidad.

Para una expresión regular como .* o .+agregue un signo de interrogación (.*? o .+?) para que coincida con la menor cantidad de caracteres posible. Para hacer coincidir opcionalmente una sección (?:blah)? pero sin emparejar a menos que sea absolutamente necesario, use algo como (?:blah)0,1?. Para un partido repetitivo (ya sea usando n, o n,m sintaxis) agregue un signo de interrogación para tratar de hacer coincidir la menor cantidad posible (por ejemplo, 3,? o 5,7?).

La documentación sobre cuantificadores de expresiones regulares también puede ser útil.

El operador no codicioso, ?. Al igual que:

.*?

El operador no codicioso no significa la coincidencia más corta posible:

abcabk

a.+?k coincidirá con todo string (en este ejemplo) en lugar de solo los últimos tres signos.

En su lugar, me gustaría encontrar la coincidencia más pequeña posible.

Ese es ese último partido posible para ‘a‘ para permitir todas las coincidencias para k.

Supongo que la única manera de hacerlo es hacer uso de una expresión como:

a[^a]+?k

const haystack = 'abcabkbk';
const paternNonGreedy = /a.+?k/;
const paternShortest = /a[^a]+?k/;

const matchesNonGreedy = haystack.match(paternNonGreedy);
const matchesShortest = haystack.match(paternShortest);

console.log('non greedy: ',matchesNonGreedy[0]);
console.log('shortest: ', matchesShortest[0]);

valoraciones y comentarios

Si aceptas, puedes dejar un enunciado acerca de qué te ha parecido este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *