Creé una expresión regular para extraer datos de coordenadas geográficas (formato decimal) de un patrón específico de cadenas.
Regex: /(?<lat>\-?\d+\.\d+)(?<comma>\,)(?<long>\-?\d+\.\d+)/gm
Muestra de cuerdas que funcionan: 11.18531,88.78292 , 8.34329,123.48655 , 21.11912,145.85430 , 36.29781,-13.06121 -16.35564,-36.07065 31.86691,122.28366 18.58158,59.20813 38.84814,-140.10204 ,
Aquí quiero extraer los valores de latitud y longitud con sus signos - .
Pero hay algunos patrones de cadenas que quiero rechazar por completo: -76.84933,-141.64907hel , no-16.3993,-11.2359 , -77.7678er,161.9786 , 69.8149,-l61.9041 5.9333,10.1rr667 , jkl11.18531,88.78292hh
Pero algunas de las cadenas anteriores pasan regex.test() como true : -76.84933,-141.64907hel , no-16.3993,-11.2359 , 5.9333,10.1rr667 , jkl11.18531,88.78292hh . Para este tipo de cadenas, quiero devolver false . No se debe encontrar ninguna coincidencia para estas cadenas como estas. Estos están muy contaminados y no quieren trabajar más en ellos.
Visite https://regex101.com/r/rT6YvD/1 para ver el área de juegos de expresiones regulares que estoy usando.
Esto es lo que no soy capaz de lograr. ¡¡¡Por favor ayuda!!!
Cualquier sugerencia aceptada con agradecimiento. Gracias por adelantado.
Puedes usar
(?<lat>-?\b(?<!\b-)\d+\.\d+)(?<comma>,)(?<long>-?\d+\.\d+)\bVea la demostración de expresiones regulares . Detalles :
(?<lat>-?\b(?<!\b-)\d+\.\d+) - Grupo "lat": un - opcional, un límite de palabra que no está inmediatamente precedido por un - que tiene una palabra char delante de él, y luego uno o más dígitos, . y uno o más dígitos(?<comma>,) - Grupo "coma": una coma(?<long>-?\d+\.\d+) - Grupo "largo": un - opcional, uno o más dígitos, . y uno o más dígitos\b - un límite de palabraSi necesita asegurarse de que la cadena solo contenga las coordenadas, puede eliminar todos los espacios en blanco y luego verificar si toda la cadena coincide con su patrón de coordenadas:
const match = text .replace(/\s+/g, '') .match(/^(?<lat>-?\d+\.\d+)(?<comma>,)(?<long>-?\d+\.\d+)$/); Aquí, ^ coincide con el comienzo de la cadena y $ coincide con el final de la cadena.