Регулярные выражения и GWT
мои вопросы: есть ли хорошее решение для использования регулярного выражения в 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);
}
}
5 ответов
тот же код с помощью RegExp может быть:
// 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);
}
}
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, вы можете использовать объект RegExp JavaScript для получения сопоставленных групп и все. Вам нужно будет изучить JSNI для объекта GWT и JavaScript RegExp.
на библиотека GWTx кажется, обеспечивает эмуляцию java.утиль.регулярное выражение.Узор и друзья. Он не выглядит полным (в частности, Matcher), но может быть хорошим началом.
метод, который они используют для подключения своих собственных реализаций классов Java для клиентской стороны, является <super-source>
объявление в модуле XML. Он упоминается в документах GWT, описании формата XML модуля в разделе "переопределение одной реализации пакета с другой". Стандартные переводимые классы JRE в GWT эмулируются таким же образом.