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.