Kyl*_*yes 3 javascript java regex gwt
我实现了Pattern类,如下所示:http: //www.java2s.com/Code/Java/GWT/ImplementjavautilregexPatternwithJavascriptRegExpobject.htm
我想使用以下正则表达式来匹配我的字符串中的网址:
(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?
Run Code Online (Sandbox Code Playgroud)
不幸的是,Java编译器当然无法解析该字符串,因为它不使用有效的转义序列(因为上面在技术上是JavaScript的url模式,而不是Java)
在一天结束时,我正在寻找一个正则表达式模式,它将在Java中编译并在JavaScript中正确执行.
您将不得不使用JSNI在Javascript中执行正则表达式评估部分.如果您使用转义的反斜杠编写正则表达式,那么它将被转换为Javascript,并且显然是无效的.认为它将在托管或开发模式下工作,因为它仍然运行Java字节码,但不在编译的应用程序上.
一个简单的JSNI示例,用于测试给定字符串是否为有效URL:
// Java method
public native boolean isValidUrl(String url) /*-{
var pattern = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return pattern.test(url);
}-*/;
Run Code Online (Sandbox Code Playgroud)
Java和Javascript正则表达式引擎之间可能存在其他不规则性,因此最好将其完全卸载到Javascript,至少对于中等复杂的正则表达式.