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 ) には次のように記載されています。

2 つの実装の間には、いくつかの小さな非互換性があります。正規表現構文の Java 固有の構文 ([az&&[^bc]]、(?<=foo)、\A、\Q など) は、純粋な Java 実装でのみ機能し、GWT 実装では機能せず、GWT 実装では拒否されません。また。また、置換式の Javascript 固有の構文 $` および $' は、それらを拒否する純粋な Java 実装ではなく、GWT 実装でのみ機能します。

それでも、正規表現を展開して機能するように適応させる方法がわかりません。

このサイト ( 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 に答える