Regular Expressions and GWT

39,967

Solution 1

The same code using RegExp could be:

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

Solution 2

GWT 2.1 now has a RegExp class that might solve your problem:

Solution 3

This answer covers ALL pattern matches, not only one, as in other answers here:

Function:

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

...and sample use:

ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}");
for (int i = 0; i < matches.size(); i++) {
    String match = matches.get(i);

}

Solution 4

If you want a pure GWT solution, I'm not sure it can be done. But if you're willing to use JSNI, you can use JavaScript's RegExp object to get the matched groups and all. You'll need to learn JSNI for GWT and JavaScript RegExp object.

Share:
39,967

Related videos on Youtube

ludwigm
Author by

ludwigm

Updated on July 25, 2020

Comments

  • ludwigm
    ludwigm almost 4 years

    My questions is: Is there a good solution to use regular expression in GWT?

    I'm not satisfied with the use of String.split(regex) for example. GWT translates the Code to JS and then uses the regex as a JS regex. But I cannot use something like the Java Matcher or Java Pattern. But I would need these for group matching.

    Is there any possibility or library?

    I tried Jakarta Regexp, but I had other problems because GWT doesn't emulate all methods of the Java SDK this library uses.

    I want to be able to use something like this on the client side:

    // 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);
        }
    } 
    
  • ludwigm
    ludwigm almost 15 years
    i thought about that but i didn't found it a nice solution
  • antony.trupe
    antony.trupe over 13 years
    I suggest fixing the RexExp typo and putting the link behind RegExp instead of inline it.
  • gor
    gor about 11 years
    You are absolutely right on this one. This is the missing piece of the puzzle. 10x alot!
  • Andrey Regentov
    Andrey Regentov over 10 years
    Are you sure that <= should not be < in <=matcher.getGroupCount()?
  • PhiLho
    PhiLho almost 10 years
    @AndreyRegentov Yes. I checked, then fixed that. What is cool with these classes is that GWT supplies a pure Java version, so we can still test their usage with JUnit.