EDITADO
Necesito encontrar dos caracteres entre '[' ']' y '/' '/' usando Javascript.
Estoy usando esta expresión regular:
([^.][/[string]]|\/string\/)|(\[(string))|(\/(string))| ((string)\])|((string)\/)que obtiene dos caracteres pero obtiene también un carácter.
La pregunta es, ¿cómo puedo hacer para obtener sólo dos caracteres?
También quiero obtener exactamente los dos caracteres dentro de la cadena, me refiero no solo a la coincidencia exacta.
P.ej.
Entrada del usuario: dz Debe encontrar coincidencias exactas que contengan "dz", por ejemplo --> "dzone" pero no "dazone". Actualmente obtengo coincidencias con ambas cadenas, "dzone" y "dazone".
Demostración: https://regex101.com/r/FEs6ib/1
Opcionalmente, puede repetir cualquier carácter, excepto los delimitadores entre los propios delimitadores, y capturar en un grupo lo que desea conservar.
Si desea múltiples coincidencias para /dzone/dzone/ , puede afirmar el último delimitador a la derecha en lugar de hacerlo coincidir.
Los partidos están en el grupo 1 o el grupo 2 donde puede verificar si existen.
\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])El patrón coincide:
\/ partido /[^\/]*(dz)[^\/]* Captura dz en el grupo 1 entre caracteres opcionales que no sean /(?=\/) Anticipación positiva, afirmar / a la derecha| O\[ Partido [[^\][]*(dz)[^\][]* Capturar dz en el grupo 2 entre caracteres opcionales que no sean [ y ] - (?=]) Búsqueda anticipada positiva, afirmar ] a la derechaDemostración de expresiones regulares
Esto coincidirá con 1 aparición de dz en la palabra. Si desea hacer coincidir la palabra completa, el grupo de captura se puede ampliar antes y después de la clase de caracteres negados como:
\/([^\/]*dz[^\/]*)(?=\/)|\[([^\][]*dz[^\][]*)(?=])Demostración de expresiones regulares
const regex = /\/[^\/]*(dz)[^\/]*(?=\/)|\[[^\][]*(dz)[^\][]*(?=])/g; [ "[dzone]", "/dzone/", "/dzone/dzone/", "/testdztest/", "[dazone]", "/dazone/", "dzone", "dazone" ].forEach(s => console.log( `${s} --> ${Array.from(s.matchAll(regex), m => m[2] ? m[2] : m[1])}` ) ); Si es compatible, también puede hacer coincidir todas las apariciones de dz entre los delimitadores mediante búsquedas con un cuantificador infinito:
(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])Demostración de expresiones regulares
const regex = /(?<=\/[^\/]*)dz(?=[^\/]*\/)|(?<=\[[^\][]*)dz(?=[^\][]*])/g; [ "[adzadzone]", "[dzone]", "/dzone/", "/dzone/dzone/", "/testdztest/", "[dazone]", "/dazone/", "dzone", "dazone" ].forEach(s => { const m = s.match(regex); if (m) { console.log(`${s} --> ${s.match(regex)}`); } });