正则表达式和GWT

时间:2009-07-21 23:14:03

标签: java regex 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 个答案:

答案 0 :(得分:94)

使用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);
    }
}

答案 1 :(得分:32)

GWT 2.1现在有一个RegExp类可以解决你的问题:

答案 2 :(得分:18)

此答案涵盖所有模式匹配,不仅包括一个,如此处的其他答案:

功能:

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

}

答案 3 :(得分:3)

如果你想要一个纯粹的GWT解决方案,我不确定它是否可以完成。但是如果你愿意使用JSNI,你可以使用JavaScript的RegExp对象来获得匹配的组和所有。您需要学习JSNI for GWT和JavaScript RegExp对象。

答案 4 :(得分:0)

GWTx library似乎提供了java.util.regex.Pattern和朋友的模拟。 它看起来并不完整(特别是Matcher),但可能是一个好的开始。

他们用于为客户端插入自己的Java类实现的技术是模块XML中的<super-source>声明。它在GWT文档中提到,模块XML格式描述在“用另一个覆盖一个包实现”下。 GWT中的标准JRE可翻译类以相同的方式进行仿真。