Digamos que tengo:
[Radius: 4000 mi.] -- 61362 -- Spring Valley, IL, USEl objetivo es conseguir:
Spring Valley, IL Quiero lograr esto con RegEx. Cuando intento (?<=--)(.*?)(?=\, US) parece que no puedo sacar el segundo grupo de '--'.
Si está abierto a considerar un enfoque sin expresiones regulares, puede dividir la cadena en los guiones y espacios (' -- '), tomar el elemento en el índice 2 (la ciudad, el estado, el país), dividirlo por la coma limitando los resultados a 2, y luego reincorporándolos con una coma, y tiene lo que está buscando.
Más fácil de leer que un enfoque de expresiones regulares y probablemente más fácil para otros desarrolladores en su base de código entender lo que está sucediendo.
const s = '[Radius: 4000 mi.] -- 61362 -- Spring Valley, IL, US'; const cityState = s.split(' -- ')[2]?.split(',', 2).join(','); console.log(cityState);Puede usar el lookbehind, pero en el medio no debe coincidir -- nuevamente
(?<= -- )(?:(?! --).)*(?=, US)Demostración de expresiones regulares
const s = `[Radius: 4000 mi.] -- 61362 -- Spring Valley, IL, US`; const regex = /(?<= -- )(?:(?! --).)*(?=, US)/; const m = s.match(regex); if (m) console.log(m[0]);También puedes usar un grupo de captura y hacer que la coincidencia sea tan específica como quieras:
--\s+\d+\s+--\s+(.*?), US\bDemostración de expresiones regulares
const s = `[Radius: 4000 mi.] -- 61362 -- Spring Valley, IL, US`; const regex = /--\s+\d+\s+--\s+(.*?), US\b/; const m = s.match(regex); if (m) console.log(m[1]);