JavaScript Regexp在Firefox中的奇怪行为



我需要关于我在GWTP应用程序中遇到的奇怪问题的建议。

设置就是这样:我的应用程序(GWTP Front,Spring Tomcat Backend(,我正在执行SuperDevmode设置上的所有测试。该应用程序有许多模块(与不同的业务打交道(,我最近刚刚添加了一个新的模块。

我们有一个带有菜单的标题,用户可以选择一个特定的值,并且该值将添加到URL中,然后我们将重新加载页面。

例如:

  • 当前URL是Local主机:8888?DEVID = 2& locale = en#someplaceToken
  • 在下拉菜单(例如test1(中选择一个值后,URL是Localhost:8888?devid = 2& locale = en& testval = 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的版本(log:test Regexp:for ff 26,52对于FF 52 ..(

关于上述正则匹配过程中可能干涉哪个因素的任何想法?我完全毫无头绪,因为它可以在纯HTML JS设置上工作:(而且更奇怪,只有新的模块才有此错误,并且仅在Firefox上。我很确定我不会错过某些配置(与其他模块相比(,所以我需要提示为什么会发生这种情况。

参见RegExp.$1-$9RegExp.$1属性不在标准轨道上。请勿在面对网络的生产站点上使用它:它不会适用于每个用户。实现和行为之间可能会发生很大的不兼容。

您应该做的是为新的Var分配一个新值,然后,在替换后,检查旧字符串是否等于新字符串,如果没有执行替换,则不是。

使用

之类的东西
var r = new RegExp("(&|\?)" + key + "=[^&]*");
var new_s = s.replace(r, "$1" + kvp);
if (new_s === s) { new_s += (new_s.length > 0 ? '&' : '?') + kvp; };
$wnd.document.location.search = new_s;

最新更新