Moje pytanie brzmi: czy istnieje dobre rozwiązanie używania wyrażeń regularnych w GWT?
Na przykład nie jestem zadowolony z użycia String.split (regex). GWT tłumaczy kod na JS, a następnie używa wyrażenia regularnego jako wyrażenia regularnego JS. Ale nie mogę użyć czegoś takiego jak Java Matcher lub Java Pattern. Ale potrzebowałbym ich do dopasowywania grupowego.
Czy jest jakaś możliwość lub biblioteka?
Próbowałem Jakarta Regexp, ale miałem inne problemy, ponieważ GWT nie emuluje wszystkich metod Java SDK, których używa ta biblioteka.
Chcę móc używać czegoś takiego po stronie klienta:
// 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);
}
}
<=
nie powinno być<
w<=matcher.getGroupCount()
?GWT 2.1 ma teraz
RegExp
klasę, która może rozwiązać twój problem:źródło
Ta odpowiedź obejmuje WSZYSTKIE dopasowania wzorców, nie tylko jedno, jak w innych odpowiedziach tutaj:
Funkcjonować:
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; }
... i przykładowe zastosowanie:
ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}"); for (int i = 0; i < matches.size(); i++) { String match = matches.get(i); }
źródło
Jeśli chcesz czystego rozwiązania GWT, nie jestem pewien, czy można to zrobić. Ale jeśli chcesz używać JSNI, możesz użyć obiektu RegExp JavaScript, aby uzyskać dopasowane grupy i wszystko. Musisz nauczyć się JSNI dla obiektu GWT i JavaScript RegExp.
źródło
Biblioteka GWTx wydaje się stanowić emulację java.util.regex.Pattern i przyjaciół. Nie wygląda na kompletne (w szczególności Matcher), ale może być dobrym początkiem.
Technika, której używają do podłączania własnych implementacji klas Javy po stronie klienta, to
<super-source>
deklaracja w module XML. Wspomina się o tym w dokumentacji GWT, opisie formatu XML modułu w sekcji „Zastępowanie jednej implementacji pakietu inną”. Standardowe klasy do tłumaczenia JRE w GWT są emulowane w ten sam sposób.źródło