Nombrando nuestras expresiones regulares en JavaScript

21-03-2022

Por José Luis Rodríguez Alonso

El otro día vi este tweet the Addy Osmani:

Tip: You can name capture groups for Regular Expressions in JavaScript. Define a named capture in angle brackets <> and they get returned under .groups.

https://twitter.com/addyosmani/status/1386031624232456194

Desconocía esa funcionalidad de las expresiones regulares en Javascript. Pues resulta que desde Java 7 también se puede seguir la misma nomenclatura en Java :)

Podemos transformar esto:

private static final Pattern pattern = Pattern.compile("^(\\w{2})_(\\d{2})$"); public SiteConfig config(String siteHeader) { final var matcher = pattern.matcher(siteHeader); return matcher.find() ? SiteConfig.of(matcher.group(1), matcher.group(2)) : SiteConfig.UNKNOWN; }

En algo como:

private static final Pattern pattern = Pattern.compile("^(?<country>\\w{2})_(?<year>\\d{2})$"); public SiteConfig config(String siteHeader) { final var matcher = pattern.matcher(siteHeader); return matcher.find() ? SiteConfig.of(matcher.group("country"), matcher.group("year")) : SiteConfig.UNKNOWN; }

Sigue siendo igual de críptico pero al menos es más sencillo saber qué es cada cosa.

Otra ventaja es que IntelliJ comprueba que el nombre coincide con alguno de los declarados en la expresión regular y te avisa si tienes algún error.

No sé si lo usaré algún día, pero está bien saberlo :)

¿Sabías que IntelliJ tiene una opción para testar expresiones regulares? alt+enter > Check RegExp