Regex 如何使用javascript';jsni的正则表达式?

Regex 如何使用javascript';jsni的正则表达式?,regex,gwt,jsni,Regex,Gwt,Jsni,这里也提出了同样的问题: ,但我不能让JSNI工作 这是将用于测试电子邮件的正则表达式的字符串: "^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$" 它会给我错误。请告诉我犯了什么错误,谢谢。为什么要将JSNI用

这里也提出了同样的问题: ,但我不能让JSNI工作

这是将用于测试电子邮件的正则表达式的字符串:

 "^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"

它会给我错误。请告诉我犯了什么错误,谢谢。

为什么要将JSNI用于正则表达式?。Gwt已经有了处理这些问题的类

我会使用
com.google.gwt.regexp.shared.regexp
,它的特性类似于Javascript的regexp

使用gwt
com.google.gwt.regexp.shared.regexp
您有许多优点:

  • 不必处理JSNI,保存语法错误
  • 使您的代码可测试,因为RegExp可以在JVM中使用
  • 让实现转义字符串或其他内容
  • 性能将是相同的
您的代码可能如下所示:

//注意,您必须双重转义\
RegExp r=RegExp.compile(^([^()[\]\\\\\\\,;:\\s@\\\\]+(\\.[\\]\\\\,;:\\\\\\\\\\\[\\\\]+)*)(\\\[[0-9]{1,3}\\\\\\\\.[0-9]{1,3}\\\\\\\\.[0-9]{1,3}\\\\\\\\\\\\\\\\\\\\\\\\\\\.[[0-9]{1,3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
如果(r.test)test@domain.com")) {
}否则{
}
无论如何,如果您仍然想按照自己的方式工作,为了使代码正常工作,您应该在返回java之前对字符串进行转义,而不是在您试图执行的位置,而且您的JSNI块语法也不正确,请注意
/*-{}-*/
而不是
/-*{}-/
。你不需要“g”标志

validate("test@domain.com",reEmail());

private native String reEmail() /*-{
    return "^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
}-*/;

private native boolean validate(String value, String regexp)/*-{
    return new RegExp(regexp).test(value)
}-*/;
验证(“test@domain.com“,重新邮寄());
私有本机字符串reEmail()/*-{
返回“^([^()[\]\\\\\,;:\\\\\\\\\\\\\\\\\\\\\\,;:\\\\\\\\\\\\\\\\\\\\\\”)(\\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.\\\\\\\\\\\\\\\\\\\\\].]);([a-zA Z-0-9]++\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
}-*/;
私有本机布尔验证(字符串值、字符串regexp)/*-{
返回新的RegExp(RegExp).test(值)
}-*/;
 private native String reEmail()/-*{
      return "^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
 }-*/;
private native boolean validate(String value, String regexp)/-*{
    //escape special characters
   var re=regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
    return new RegExp(re,'g').test(value)
}-*/;
 validate("test@domain.com",reEmail());
validate("test@domain.com",reEmail());

private native String reEmail() /*-{
    return "^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
}-*/;

private native boolean validate(String value, String regexp)/*-{
    return new RegExp(regexp).test(value)
}-*/;