java regex gwt

java - Expresiones regulares y GWT



regex (5)

El mismo código usando RegExp podría ser:

// Compile and use regular expression RegExp regExp = RegExp.compile(patternStr); MatchResult matcher = regExp.exec(inputStr); boolean matchFound = matcher != null; // equivalent to regExp.test(inputStr); if (matchFound) { // Get all groups for this match for (int i = 0; i < matcher.getGroupCount(); i++) { String groupStr = matcher.getGroup(i); System.out.println(groupStr); } }

Mi pregunta es: ¿hay una buena solución para usar expresiones regulares en GWT?

No estoy satisfecho con el uso de String.split (regex) por ejemplo. GWT traduce el código a JS y luego usa la expresión regular como una expresión regular de JS. Pero no puedo usar algo como Java Matcher o Java Pattern. Pero necesitaría estos para la coincidencia de grupos.

¿Hay alguna posibilidad o biblioteca?

Intenté con Jakarta Regexp, pero tuve otros problemas porque GWT no emula todos los métodos del SDK de Java que utiliza esta biblioteca.

Quiero ser capaz de usar algo como esto en el lado del cliente:

// Compile and use regular expression Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(inputStr); boolean matchFound = matcher.find(); if (matchFound) { // Get all groups for this match for (int i=0; i<=matcher.groupCount(); i++) { String groupStr = matcher.group(i); System.out.println(groupStr); } }


Esta respuesta cubre TODAS las coincidencias de patrones, no solo una, como en otras respuestas aquí:

Función:

private ArrayList<String> getMatches(String input, String pattern) { ArrayList<String> matches = new ArrayList<String>(); RegExp regExp = RegExp.compile(pattern, "g"); for (MatchResult matcher = regExp.exec(input); matcher != null; matcher = regExp.exec(input)) { matches.add(matcher.getGroup(0)); } return matches; }

... y uso de muestra:

ArrayList<String> matches = getMatches(someInputStr, "//$//{[A-Za-z_0-9]+//}"); for (int i = 0; i < matches.size(); i++) { String match = matches.get(i); }


GWT 2.1 ahora tiene una clase RegExp que podría resolver su problema:


La biblioteca GWTx parece proporcionar una emulación de java.util.regex.Pattern y amigos. No parece completo (en particular, Matcher), pero podría ser un buen comienzo.

La técnica que utilizan para conectar sus propias implementaciones de clases Java para el lado del cliente es la declaración <super-source> en el módulo XML. Se menciona en los documentos de GWT, la descripción del formato del módulo XML en "Anulación de la implementación de un paquete con otro". Las clases traducibles estándar de JRE en GWT se emulan de la misma manera.


Si quieres una solución GWT pura, no estoy seguro de que se pueda hacer. Pero si está dispuesto a usar JSNI, puede usar el objeto RegExp de JavaScript para obtener los grupos coincidentes y todo. Necesitará aprender el objeto RegExp de JSNI para GWT y JavaScript.