Expressions régulières et GWT

Mes questions sont: existe-t-il une bonne solution pour utiliser l'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, puis utilise l'expression rationnelle en tant QU'expression rationnelle JS. Mais je ne peux pas utiliser quelque chose comme Java Matcher ou Java Pattern. Mais j'aurais besoin de ceux - ci pour la correspondance de groupe.

Y a - t-il une possibilité ou une bibliothèque?

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

Je veux pouvoir utiliser quelque chose comme ceci 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);
    }
} 
76
demandé sur Gavin Miller 2009-07-22 03:14:03

5 réponses

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);
    }
}
90
répondu AleArnaiz 2014-07-24 15:22:05

GWT 2.1 a maintenant un RegExp classe qui pourrait résoudre votre problème:

32
répondu Philippe Beaudoin 2010-11-02 00:11:44

Cette réponse couvre toutes les correspondances de motif, 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 de l'échantillon:

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

}
18
répondu Zbigniew Wiadro 2011-11-28 12:53:12

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 JavaScript RegExp objet.

3
répondu Raze 2009-07-22 10:36:58

La bibliothèque GWTx semble fournir une émulation de java.util.regex.Modèle et amis. Il ne semble pas complet (Matcher en particulier), mais pourrait être un bon début.

La technique qu'ils utilisent pour brancher leurs propres implémentations de classes Java côté client est la déclaration <super-source> dans le module XML. Il est mentionné dans GWT docs, description du format XML du module sous "remplacer une implémentation de package par une autre". Les classes traduisibles JRE Standard dans GWT sont émulées de la même manière.

0
répondu 2009-07-24 10:09:54