Мои вопросы: есть ли хорошее решение для использования регулярных выражений в GWT?
Например, меня не устраивает использование String.split (regex). GWT переводит код в JS, а затем использует регулярное выражение как регулярное выражение JS. Но я не могу использовать что-то вроде Java Matcher или Java Pattern. Но они мне понадобятся для группового сопоставления.
Есть ли возможность или библиотека?
Я попробовал Jakarta Regexp, но у меня были другие проблемы, потому что GWT не эмулирует все методы Java SDK, которые использует эта библиотека.
Я хочу иметь возможность использовать что-то подобное на стороне клиента:
// 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);
}
}
<=
не должно быть<
в<=matcher.getGroupCount()
?GWT 2.1 теперь имеет
RegExp
класс, который может решить вашу проблему:источник
Этот ответ охватывает ВСЕ совпадения шаблонов, а не только одно, как в других ответах здесь:
Функция:
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; }
... и пример использования:
ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}"); for (int i = 0; i < matches.size(); i++) { String match = matches.get(i); }
источник
Если вам нужно чистое решение GWT, я не уверен, что это возможно. Но если вы хотите использовать JSNI, вы можете использовать объект JavaScript RegExp для получения сопоставленных групп и всего остального. Вам нужно будет изучить JSNI для GWT и объект JavaScript RegExp.
источник
Библиотека GWTx, кажется, обеспечивает эмуляцию java.util.regex.Pattern и других. Это не выглядит законченным (в частности, Matcher), но может быть хорошим началом.
Метод, который они используют для подключения собственных реализаций классов Java к клиентской стороне, - это
<super-source>
объявление в модуле XML. Это упоминается в документации GWT, описание формата XML модуля в разделе «Замена одной реализации пакета другой». Стандартные переводимые классы JRE в GWT эмулируются таким же образом.источник