2010-11-11 1 views
5

Stiamo utilizzando GWT 2.03 insieme a SmartGWT 2.2. Sto cercando di abbinare una regex come di seguito nel codice lato client.GWT: come ottenere espressioni regolari (Pattern e Matcher) che lavorano sul lato client

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()); 
} 

sembra che le classi Pattern e Matcher non sono compilati per Javascript dal compilatore GWTC e, quindi, questa applicazione non è stato caricato. Qual è il codice client GWT equivalente in modo che possa trovare le corrispondenze regolari in String?

Come è stato possibile associare espressioni regolari all'interno di una stringa in GWT lato client?

Grazie,

risposta

11

considerare l'aggiornamento a GWT 2.1 e utilizzando RegExp.

+0

Vorrei poter fare in questo momento. Non ho abbastanza tempo per testare la nostra app per 2.1 - forse, a volte presto. – anjanb

5

Usa GWT JSNI chiamare nativo JavaScript regexp:

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

Forse si potrebbe scaricare i file RegExp da GWT 2.1 e aggiungerli al vostro progetto?

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

Scarica GWT 2.1 fonte incl, aggiungere quella directory da qualche parte nel progetto, quindi aggiungere il riferimento al "RegExp.gwt.xml" utilizzando il tag <inherits> dal XML GWT.

Non sono sicuro che funzionerebbe, ma ne varrebbe la pena. Forse si riferisce a qualcos'altro specifico per GWT 2.1 che non hai, ma ho appena controllato un po 'il codice e non credo che lo faccia.

12

Basta usare la classe String per farlo! Ti piace questa:

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"); 

Funziona bene come questo, senza dover importare o aggiornare o qualsiasi altra cosa. Basta cambiare il testo e regex a tuo piacimento.

Saluti, Glenn

2

GWT 2.1 ha ora una classe RegExp che potrebbe risolvere il 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"); 
}