2010-11-11 14 views
5

Estamos usando GWT 2.03 junto con SmartGWT 2.2. Estoy tratando de hacer coincidir una expresión regular como la que figura a continuación en el código del lado del cliente.GWT: cómo obtener expresiones regulares (Patrón y Matcher) trabajando en el lado del cliente

Pattern pattern = Pattern.compile("\\\"(/\d+){4}\\\""); 
String testString1 = "[ \"/2/4/5/6/8\", \"/2/4/5/6\"]"; 
String testString2 = "[ ]"; 

Matcher matcher = pattern.matcher(testString1); 
boolean result = false; 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

Parece ser que las clases Pattern y Matcher no se compilan a Javascript por el compilador GWTC y por lo tanto esta aplicación no se ha cargado. ¿Cuál es el código de cliente GWT equivalente para que pueda encontrar coincidencias de expresiones regulares dentro de una cadena?

¿Cómo ha podido hacer coincidir expresiones regulares dentro de una cadena en GWT del lado del cliente?

Gracias,

Respuesta

11

considerar la actualización a GWT 2.1 y usando RegExp.

+0

Me gustaría poder hacer en este momento. No tengo tiempo suficiente para probar nuestra aplicación para 2.1, quizás, en algún momento pronto. – anjanb

5

Uso GWT JSNI para llamar nativa Javascript expresión regular:

public native String jsRegExp(String str, String regex) 
/*-{ 
    return str.replace(/regex/); // an example replace using regexp 
    } 
}-*/; 
2

Tal vez podría descargar los archivos RegExp de GWT 2.1 y añadirlos a su proyecto?

http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/regexp/

Descargar GWT 2.1 fuente incluido, añadir ese directorio en alguna parte de su proyecto, a continuación, añadir la referencia a la "RegExp.gwt.xml" usando la etiqueta de su <inherits> XML GWT.

No estoy seguro de si eso funcionaría, pero valdría la pena intentarlo. Tal vez hace referencia a algo más específico de GWT 2.1 que no tiene, pero acabo de ver el código un poco y no creo que lo haga.

12

¡Solo usa la clase String para hacerlo! De esta manera:

String text = "google.com"; 
    if (text.matches("(\\w+\\.){1,2}[a-zA-Z]{2,4}")) 
     System.out.println("match"); 
    else 
     System.out.println("no match"); 

Funciona bien como este, sin tener que importar o actualizar o lo que sea. Simplemente cambie el texto y la expresión regular a su gusto.

Saludos, Glenn

2

GWT 2.1 tiene ahora una clase RegExp que podría resolver su problema:

// Compile and use regular expression 
RegExp regExp = RegExp.compile(patternStr); 
MatchResult matcher = regExp.exec(inputStr); 
boolean matchFound = regExp.test(inputStr); 

if (matchFound) { 
Window.alert("Match found"); 
    // Get all groups for this match 
    for (int i=0; i<=matcher.getGroupCount(); i++) { 
     String groupStr = matcher.getGroup(i); 
     System.out.println(groupStr); 
    } 
}else{ 
Window.alert("Match not found"); 
} 
Cuestiones relacionadas