正则expression式和GWT
我的问题是:在GWT中使用正则expression式是否有一个好的解决scheme?
例如,我不满意使用String.split(regex)。 GWT将代码翻译成JS,然后使用正则expression式作为JS正则expression式。 但是我不能使用像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); } }
使用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
类可以解决你的问题:
这个答案涵盖了所有的模式匹配,而不仅仅是一个,在这里的其他答案:
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; }
…和样本使用:
ArrayList<String> matches = getMatches(someInputStr, "\\$\\{[A-Za-z_0-9]+\\}"); for (int i = 0; i < matches.size(); i++) { String match = matches.get(i); }
如果你想要一个纯粹的GWT解决scheme,我不知道它可以完成。 但是,如果您愿意使用JSNI,则可以使用JavaScript的RegExp对象获取匹配的组和全部。 你需要学习JSNI的GWT和JavaScript的RegExp对象。
GWTx库似乎提供了一个java.util.regex.Pattern和朋友的模拟。 它看起来并不完整(特别是Matcher),但可能是一个好的开始。
他们用来插入自己的客户端Java类实现的技术是模块XML中的<super-source>
声明。 它在GWT文档中提到,在“用另一个重写一个包实现”下的模块XML格式描述。 GWT中的标准JRE可翻译类也以相同的方式进行模拟。