Expresiones regulares y GWT

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

No estoy satisfecho con el uso de la Cadena.split(regex), por ejemplo. GWT se traduce el Código JS y, a continuación, utiliza la expresión regular como un JS regex. Pero no puedo usar algo como Java Comparador o Java Patrón. Pero me gustaría necesario para la coincidencia de grupo.

Hay alguna posibilidad o la biblioteca?

Traté de Yakarta Regexp, pero yo tenía otros problemas debido a GWT no emula todos los métodos de la SDK Java de esta biblioteca usos.

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);
    }
} 
InformationsquelleAutor ludwigm | 2009-07-21

5 Kommentare

  1. 95

    El mismo código con 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);
        }
    }
    • ¿Estás seguro de que <= no debe ser < en <=matcher.getGroupCount()?
    • Sí. He comprobado, entonces fijo que. ¿Qué es cool con estas clases es que GWT suministros puro versión de Java, así que todavía podemos probar su uso con JUnit.
  2. 32

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

    • Sugiero que la fijación de la RexExp error y poner el enlace detrás de RegExp en lugar de en línea es.
  3. 19

    Esta respuesta cubre TODAS las coincidencias de patrón, no sólo uno, 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 ejemplo de uso:

    ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}");
    for (int i = 0; i < matches.size(); i++) {
        String match = matches.get(i);
    
    }
    • Tienes toda la razón en esto. Esta es la pieza que falta del rompecabezas. 10x mucho!
  4. 3

    Si quieres un puro GWT solución, no estoy seguro de que se puede hacer. Pero si usted está dispuesto a utilizar JSNI, usted puede usar JavaScript del objeto RegExp para conseguir la coincidencia de los grupos y de todos. Usted tendrá que aprender JSNI para GWT y JavaScript objeto RegExp.

    • pensé sobre eso, pero no he encontrado una buena solución
  5. 0

    La GWTx biblioteca parece proporcionar una emulación de java.util.regex.Patrón y amigos.
    No se ve completa (Combinador en particular), pero podría ser un buen comienzo.

    La técnica que utilizan para tapar sus propias implementaciones de clases Java para el lado del cliente es el <super-source> declaración en el módulo XML. Es mencionado en GWT docs, módulo XML de descripción de formato de bajo «leyes de un paquete de la aplicación con la otra». Estándar JRE traducible clases en GWT son emulados de la misma manera.

    • hola he probado esta biblioteca antes. es una buena solución para la falta de JRe de emulación, pero en este caso se doens no apoyo a la agrupación. Los métodos para esto faltan.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea