Mi pregunta es: ¿Existe 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 expresión regular de JS. Pero no puedo usar algo como Java Matcher o Java Pattern. Pero necesitaría estos para emparejar grupos.
¿Existe alguna posibilidad o biblioteca?
Probé Jakarta Regexp, pero tuve otros problemas porque GWT no emula todos los métodos del SDK de Java que usa esta biblioteca.
Quiero poder 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);
}
}
<=
no debería estar<
en<=matcher.getGroupCount()
?GWT 2.1 ahora tiene una
RegExp
clase que podría resolver su problema:fuente
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); }
fuente
Si desea una solución GWT pura, no estoy seguro de que pueda hacerlo. Pero si está dispuesto a usar JSNI, puede usar el objeto RegExp de JavaScript para obtener los grupos coincidentes y todo. Deberá aprender JSNI para GWT y el objeto RegExp de JavaScript.
fuente
La biblioteca GWTx parece proporcionar una emulación de java.util.regex.Pattern y sus amigos. No parece completo (Matcher en particular), pero podría ser un buen comienzo.
La técnica que utilizan para conectar sus propias implementaciones de clases de Java para el lado del cliente es la
<super-source>
declaración en XML del módulo. Se menciona en los documentos de GWT, descripción del formato XML del módulo en "Anulación de la implementación de un paquete con otro". Las clases traducibles de JRE estándar en GWT se emulan de la misma manera.fuente