Regular Expressions and GWT

JavaRegexGwt

Java Problem Overview


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

Java Solutions


Solution 1 - Java

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 - Java

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

Solution 3 - Java

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 - Java

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.

Solution 5 - Java

The GWTx library seems to provide an emulation of java.util.regex.Pattern and friends. It doesn't look complete (Matcher in particular), but might be a good start.

The technique they use to plug their own implementations of Java classes for the client side is the <super-source> declaration in module XML. It's mentioned in GWT docs, module XML format description under "Overriding one package implementation with another". Standard JRE translatable classes in GWT are emulated the same way.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionludwigmView Question on Stackoverflow
Solution 1 - JavaAleArnaizView Answer on Stackoverflow
Solution 2 - JavaPhilippe BeaudoinView Answer on Stackoverflow
Solution 3 - JavaChris WView Answer on Stackoverflow
Solution 4 - JavaRazeView Answer on Stackoverflow
Solution 5 - JavampodyachevView Answer on Stackoverflow