GWT: как заставить регулярное выражение (Pattern and Matcher) работать на стороне клиента - PullRequest
5 голосов
/ 11 ноября 2010

Мы используем GWT 2.03 вместе со SmartGWT 2.2. Я пытаюсь сопоставить регулярное выражение, как показано ниже в коде на стороне клиента.

Pattern pattern = Pattern.compile("\\\"(/\d+){4}\\\"");
String testString1 = "[    \"/2/4/5/6/8\",    \"/2/4/5/6\"]";
String testString2 = "[  ]";

Matcher matcher = pattern.matcher(testString1);
boolean result = false;
while (matcher.find()) {
    System.out.println(matcher.group());
}

Похоже, что классы Pattern и Matcher НЕ компилируются в Javascript компилятором GWTC, и, следовательно, это приложение НЕ загружается. Что такое эквивалентный код клиента GWT, чтобы я мог найти совпадения с регулярным выражением в строке?

Как вам удалось сопоставить регулярные выражения в строке в GWT на стороне клиента?

Спасибо,

Ответы [ 5 ]

12 голосов
/ 16 мая 2011

Просто используйте класс String, чтобы сделать это! Как это:

String text = "google.com";
    if (text.matches("(\\w+\\.){1,2}[a-zA-Z]{2,4}"))
        System.out.println("match");
    else
        System.out.println("no match");

Работает нормально, без необходимости импорта или обновления или чего-либо еще. Просто измените текст и присвойте ему регулярные выражения.

Привет, Гленн

11 голосов
/ 11 ноября 2010

Рассмотрите возможность обновления до GWT 2.1 и использования RegExp.

5 голосов
/ 11 ноября 2010

Используйте GWT JSNI для вызова собственного регулярного выражения Javascript:

public native String jsRegExp(String str, String regex)
/*-{
    return str.replace(/regex/);  // an example replace using regexp 
    }
}-*/;
2 голосов
/ 10 мая 2012

GWT 2.1 теперь имеет класс RegExp , который может решить вашу проблему:

// Compile and use regular expression
RegExp regExp = RegExp.compile(patternStr);
MatchResult matcher = regExp.exec(inputStr);
boolean matchFound = regExp.test(inputStr);

if (matchFound) {
Window.alert("Match found");
    // Get all groups for this match
    for (int i=0; i<=matcher.getGroupCount(); i++) {
        String groupStr = matcher.getGroup(i);
        System.out.println(groupStr);
    }
}else{
Window.alert("Match not found");
}
2 голосов
/ 11 ноября 2010

Возможно, вы могли бы загрузить файлы RegExp из GWT 2.1 и добавить их в свой проект?

http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/regexp/

Загрузить GWT 2.1 с исходным кодом, добавить этот каталог где-нибудь в вашем проекте, а затемдобавьте ссылку на «RegExp.gwt.xml», используя тег <inherits> из вашего GWT XML.

Я не уверен, что это сработает, но оно того стоит.Может быть, он ссылается на что-то другое, специфичное для GWT 2.1, которого у вас нет, но я только немного проверил код и не думаю, что это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...