2011-06-29 66 views
2

我想更具體使用的replaceAll與GWT:

doSomeGWTStuffWithTheString(text.replaceAll("(?i)(" + query + ")", "<b>$1</b>")); 

但對於一些它不運行的原因。我想我必須爲此使用一些特殊的庫。

如果您知道如何在GWT中完成上述操作,請告訴我。

我正在使用GWT的2.4測試版。

回答

5

String.replaceAll()在GWT客戶端在內部使用JavaScript的正則表達式實現。看看RegExp(包裝類)javadoc。它說:

Java-specific constructs in the regular expression syntax 
(e.g. [a-z&&[^bc]], (?<=foo), \A, \Q) work only in the pure Java implementation, 
not the GWT implementation, and are not rejected by either. 

因此,似乎不支持使用(?i)

+0

我想你的意思是說不支持使用'(?i)'(即內聯修飾符)。 '?'的大多數其他用法(不情願的量詞,非捕獲組等)在JavaScript中與在Java中使用相同。 –

+0

@Alan Moore:thx,已更正。 –

2

如果這是你的整個行,你忘記將返回的字符串分配給某些東西。 replaceAll()方法不會將替換的結果隱式分配給它的String對象。

測試:

String text = "I am trying to match SOMETHING"; 
String query = "ing"; 

System.out.println(text); 
text = text.replaceAll("(?i)(" + query + ")", "<b>$1</b>"); 
System.out.println(text); 

輸出:

I am trying to match SOMETHING 
I am try<b>ing</b> to match SOMETH<b>ING</b> 
+0

@Mat啊。因爲我現在知道這個想法不適用,所以我設置了「入門」GWT應用程序來嘗試。它在'客戶端'和'服務器'代碼中均按預期工作,但我使用的是GWT 2.3。你是否對其他版本有相同的問題,或只是2.4測試版?另外,快速的完整性檢查,我假設你已經驗證:'doSomeGWTStuffWithTheString()'接收你期望的「替換」字符串嗎?謝謝。 – Wiseguy

+0

@Mat也許我試過的部分被優化了,因爲它是靜態文本,因此不會被轉換成JavaScript。 – Wiseguy