81 votes

Expressions régulières et GWT

Mes questions sont les suivantes : Existe-t-il une bonne solution pour utiliser une expression régulière dans GWT ?

Je ne suis pas satisfait de l'utilisation de String.split(regex) par exemple. GWT traduit le code en JS et utilise ensuite la regex comme une regex JS. Mais je ne peux pas utiliser quelque chose comme Java Matcher ou Java Pattern. Mais j'en aurais besoin pour la correspondance de groupe.

Existe-t-il une possibilité ou une bibliothèque ?

J'ai essayé Jakarta Regexp, mais j'ai eu d'autres problèmes parce que GWT n'émule pas toutes les méthodes du SDK Java que cette bibliothèque utilise.

Je veux pouvoir utiliser quelque chose comme ça du côté client :

// 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);
    }
}

95voto

Alejandro Arnáiz Points 646

Le même code utilisant RegExp pourrait être :

// 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);
    }
}

32voto

Philippe Beaudoin Points 2230

GWT 2.1 possède maintenant un RegExp qui pourrait résoudre votre problème :

19voto

Zbigniew Wiadro Points 189

Cette réponse couvre TOUTES les correspondances de motifs, et pas seulement une, comme dans d'autres réponses ici :

Fonction :

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;
}

...et l'utilisation d'échantillons :

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

}

3voto

Raze Points 1304

Si vous voulez une solution GWT pure, je ne suis pas sûr que cela puisse être fait. Mais si vous êtes prêt à utiliser JSNI, vous pouvez utiliser l'objet RegExp de JavaScript pour obtenir les groupes correspondants et tout. Vous aurez besoin d'apprendre JSNI pour GWT et l'objet RegExp de JavaScript.

0voto

El Bibliothèque GWTx semble fournir une émulation de java.util.regex.Pattern et de ses amis. Elle ne semble pas complète (Matcher en particulier), mais pourrait être un bon début.

La technique qu'ils utilisent pour brancher leurs propres implémentations des classes Java pour le côté client est le <super-source> dans le module XML. C'est mentionné dans les docs GWT, description du format XML du module sous "Overriding one package implementation with another". Les classes traduisibles standard JRE dans GWT sont émulées de la même manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X