Tengo una URL como la siguiente
https://www.aaaa.com:5000 -> https://www.aaaa.com https://bbbb.com:443 -> https://bbbb.com https://cccc.com -> https://cccc.comNecesito quitar solo el puerto ..
He intentado con lo siguiente que no funciona, toma todos los datos
https://regex101.com/r/CIiALR/1
(https?://.*):(\d*)\/?(.*)`El truco es que debo usar solo expresiones regulares, no js lib, ya que lo necesito para usar Vector.
https://vector.dev/docs/reference/vrl/
También: https://vector.dev/docs/reference/vrl/#parse-custom-logs
No hay necesidad de expresiones regulares, puede usar el objeto url para este tipo de trabajo.
var url = new URL('https://www.aaaa.com:5000'); url.port = ''; console.log(url.toString());Más información sobre el objeto URL: https://developer.mozilla.org/en-US/docs/Web/API/URL
Mirando https://vector.dev/docs/reference/vrl/ puede usar un grupo de captura con nombre y, opcionalmente, hacer coincidir el número de puerto:
^(?P<withoutport>https?://[^/\s]+?)(?::\d+|$)^ Comienzo de cadena(?P<withoutport> Grupo con nombrehttps?:// Coincide con el protocolo[^/\s]+? Coincide con cualquier carácter excepto / o un carácter de espacio en blanco de una manera no codiciosa) Cerrar grupo con nombre(?::\d+|$) Hacer coincidir : y 1+ dígitos, o afirmar el final de la cadenaDemostración de expresiones regulares
O puede hacerlo tan específico como lo requiera:
^(?P<withoutport>https?://[^/\s]+?)(?:[:?#/]\S*)?$Dependiendo de la versión del vector que esté utilizando, sugeriría usar la función integrada parse_url para extraer las partes que desea.
Ejemplo TOML:
[sources.my_demo_logs_source] type = "demo_logs" format = "shuffle" lines = [ "https://www.aaaa.com:5000" , "https://bbbb.com:443", "https://cccc.com" ] [transforms.my_transform] type = "remap" inputs = [ "my_demo_logs_source" ] source = """ url_parts = parse_url!(.message) .url = join!([ url_parts.scheme, url_parts.host ], "://") """ [sinks.my_sink_id] type = "console" inputs = [ "my_transform" ] target = "stdout" [sinks.my_sink_id.encoding] codec = "json"Salida de ejemplo:
{"message":"https://bbbb.com:443","source_type":"demo_logs","timestamp":"2022-06-28T07:20:45.202665432Z","url":"https://bbbb.com"} {"message":"https://www.aaaa.com:5000","source_type":"demo_logs","timestamp":"2022-06-28T07:20:46.202754200Z","url":"https://www.aaaa.com"} {"message":"https://cccc.com","source_type":"demo_logs","timestamp":"2022-06-28T07:20:47.201350600Z","url":"https://cccc.com"}Esto fue probado con:
❯ vector --version vector 0.22.0 (x86_64-unknown-linux-gnu 5e937e3 2022-06-01)