我需要您對我在我的GWTP應用程序中遇到的奇怪問題提出建議。JavaScript RegExp在Firefox中的奇怪行爲
設置是這樣的:我的應用程序(GWTP前端,Spring + Tomcat後端),我正在做一個SuperDevMode設置的所有測試。該應用程序有許多模塊 (處理不同的業務),我剛剛添加了一個新模塊。
我們有一個包含菜單的標題,用戶可以選擇一個特定值並將該值添加到URL中,然後我們將重新加載頁面。
例如:
- 當前URL爲localhost:8888 DEVID = 2 &語言環境= EN#somePlaceToken
- 後在下拉菜單中選擇的值(例如TEST1),URL爲localhost:8888 ?DEVID = 2 &區域= EN & =名爲testVal test1的#somePlaceToken
這樣做是通過以下方式(這已經很長一段時間,其他模塊以這種方式工作):
在主講人:
public void onChangeTestVal(ChangeTestValEvent evt) {
GWT.log("zzzz, it did get here.");
UrlUtil.append("testVal", evt.getValue());
}
UrlUtil:
public static native void append(String key, String value) /*-{
key = escape(key); value = escape(value);
var s = $wnd.document.location.search;
var kvp = key + "=" + value;
var r = new RegExp("(&|\\?)" + key + "=[^\&]*");
s = s.replace(r, "$1" + kvp);
console.log("test RegExp: " + RegExp.$1);
if (!RegExp.$1) { s += (s.length > 0 ? '&' : '?') + kvp; };
$wnd.document.location.search = s;
}-*/
所以總結一下,這個想法是檢查 「鍵」 的存在 - >更換;否則,添加字符串「key = val」。
我已經測試過,並且這在純html + js設置上運行良好。但是,就我而言,在嘗試使用實際的GWT應用程序時,我發現它有時不起作用!
特別是,當它不起作用時,感謝日誌,我發現RegExp。$ 1會返回一些奇怪的值:我使用的Firefox版本(日誌:測試RegExp:26代表FF 26,和52的FF 52 ..)
任何想法可能會干擾上述正則表達式匹配過程中的任何因素?我完全無能爲力,因爲它在純html + js設置上工作正常:(更奇怪的是,它只是新模塊有這個錯誤,並且只在Firefox上。我確信我不會錯過某些配置(相對於其他模塊),所以我需要一個提示,爲什麼會這樣。在此先感謝。
的'正則表達式。$ 1'已被棄用。不要使用它們。 –
但在我的測試中,這適用於Chrome(58)。你對Firefox中這個問題的可能原因有什麼建議嗎? – ramcrys
它不是任何規格的一部分,所以行爲是不確定的。你應該做的是給一個新的var分配一個新的值,然後,在替換之後,檢查if(oldStr!== newStr){// ok,做一些替換操作}' –