2

我正在使用一个在 DevMode 下工作但没有编译和部署过的 RegEx。它是扩展 com.google.gwt.user.client.ui.SuggestOracle.Suggestion 的类的一部分:

    @Override
public String getDisplayString() {
    String toReturn = myUser.getName() + " (" + myUser.getUserid() + ") " + (myUser.getCompanyname() == null ? "N/A" : myUser.getCompanyname());
    return toReturn.replaceAll("(?i)" + "(" + myInput + ")", "<b>$1</b>");
    return toReturn;
}

官方文档(http://www.gwtproject.org/javadoc/latest/com/google/gwt/regexp/shared/RegExp.html)声明如下:

两种实现之间存在一些小的不兼容性。正则表达式语法中的 Java 特定结构(例如 [az&&[^bc]]、(?<=foo)、\A、\Q)仅在纯 Java 实现中有效,在 GWT 实现中无效,并且不会被任何一个。此外,替换表达式中特定于 Javascript 的构造 $` 和 $' 仅在 GWT 实现中有效,而不是在拒绝它们的纯 Java 实现中有效。

不过,我不知道如何调整我的 RegEx,以便它在部署后工作。

这个网站(http://planet.jboss.org/post/smartgwt_tip_regex_evaluation)这样说:

解决方案是将 OR 选项从最复杂到最不复杂

任何想法如何使这个解决方案适应我的问题?

干杯,蒂姆

4

1 回答 1

2

JavaScript 不支持(?i)切换到不区分大小写的匹配。

你最好的选择是使用com.google.gwt.regexp.shared.RegExp

public String getDisplayString() {
  String toReturn = myUser.getName() + " (" + myUser.getUserid() + ") " + (myUser.getCompanyname() == null ? "N/A" : myUser.getCompanyname());
  return RegExp.compile(myInput, "ig").replace(toReturn, "<b>$&</b>");
}
于 2014-11-06T16:34:10.770 回答