Frage Reguläre Ausdrücke und GWT


Meine Frage ist: Gibt es eine gute Lösung, um reguläre Ausdrücke in GWT zu verwenden?

Ich bin nicht zufrieden mit der Verwendung von String.split (Regex) zum Beispiel. GWT übersetzt den Code in JS und verwendet dann die Regex als JS Regex. Aber ich kann sowas wie Java Matcher oder Java Pattern nicht verwenden. Aber ich würde diese für den Gruppenabgleich benötigen.

Gibt es eine Möglichkeit oder eine Bibliothek?

Ich habe versucht, Jakarta Regexp, aber ich hatte andere Probleme, weil GWT nicht alle Methoden des Java SDK diese Bibliothek emuliert.

Ich möchte so etwas auf der Client-Seite verwenden können:

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

75
2017-07-21 23:14


Ursprung


Antworten:


Der gleiche Code mit RegExp könnte sein:

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

89
2017-10-24 08:35



GWT 2.1 hat jetzt eine RegExp Klasse, die Ihr Problem lösen könnte:


32
2017-10-29 20:23



Diese Antwort deckt ALLE Musterübereinstimmungen ab, nicht nur eins, wie in anderen Antworten hier:

Funktion:

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

... und Beispielverwendung:

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

}

18
2017-11-28 12:41



Wenn Sie eine reine GWT-Lösung wünschen, bin ich mir nicht sicher, ob das möglich ist. Wenn Sie jedoch JSNI verwenden möchten, können Sie das RegExp-Objekt von JavaScript verwenden, um die übereinstimmenden Gruppen und alle zu erhalten. Sie müssen JSNI für GWT und JavaScript RegExp-Objekt lernen.


3
2017-07-22 10:36



Das GWTx-Bibliothek scheint eine Emulation von java.util.regex.Pattern und Freunden zu bieten. Es sieht nicht vollständig aus (insbesondere Matcher), könnte aber ein guter Anfang sein.

Die Technik, die sie verwenden, um ihre eigenen Implementierungen von Java - Klassen für die Client - Seite zu verbinden, ist die <super-source> Deklaration in Modul XML. Es wird in der GWT-Dokumentation, Modul-XML-Formatbeschreibung unter "Überschreiben einer Paketimplementierung durch eine andere" erwähnt. Standard-JRE-übersetzbare Klassen in GWT werden auf die gleiche Weise emuliert.


0
2017-07-24 10:09