Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在java脚本中使用regex删除查询字符串_Javascript_Regex - Fatal编程技术网

Javascript 在java脚本中使用regex删除查询字符串

Javascript 在java脚本中使用regex删除查询字符串,javascript,regex,Javascript,Regex,我需要删除RESTAPI调用附带的查询参数。下面是需要考虑的示例URL。在每个URL中,我们都需要删除“key”参数及其值 /测试/v1?键=键值&参数1=值1&参数2=值2 /测试/v1?键=键值 /测试/v1?参数1=value1&key=keyval /测试/v1?参数1=value1&key=keyval¶m2=value2 删除键参数后,最终URL应如下所示 /测试/v1?参数1=值1和参数2=值2 /测试/v1 /测试/v1?参数1=值1 /测试/v1?参数1=valu

我需要删除RESTAPI调用附带的查询参数。下面是需要考虑的示例URL。在每个URL中,我们都需要删除“key”参数及其值

  • /测试/v1?键=键值&参数1=值1&参数2=值2
  • /测试/v1?键=键值
  • /测试/v1?参数1=value1&key=keyval
  • /测试/v1?参数1=value1&key=keyval¶m2=value2
删除键参数后,最终URL应如下所示

  • /测试/v1?参数1=值1和参数2=值2
  • /测试/v1
  • /测试/v1?参数1=值1
  • /测试/v1?参数1=value1=¶m2=value2
我们使用下面的正则表达式来匹配和替换php中的这个查询字符串。()


(?正则表达式在PHP中工作,但在Javascript中不工作,因为Javascript不支持lookbehind


这里最简单的修复方法是替换lookbehind
(?显然,Javascript不支持lookbehind,因此您的正则表达式将无法工作

在Javascript中,您可以使用以下内容:

repl = input.replace(/(\?)key=[^&]*(?:&|$)|&key=[^&]*/gmi, '$1');

Regex正在使用Regex交替在两条路径上工作:

  • 如果此查询参数正好位于
    之后,则我们抓取参数之后的
    &
    ,并将
    放回替换位置
  • 如果此查询参数位于
    &
    之后,则
    &key=value
    将替换为空字符串

  • javascript中没有lookbehind功能,因此要测试键/值之前的字符,必须匹配它。要使模式在url的查询部分的任何位置都有效,可以在非捕获组中使用替换,并捕获问号:

    url = url.replace(/(?:&|(\?))key=[^&#]*(?:(?!\1).)?/, '$1');
    

    注意:
    #
    被排除在字符类之外,以防止url的片段部分(如果有)与键值匹配。

    如果您想在不使用正则表达式的情况下执行此操作,下面是一个函数:

    var removeQueryString = function (str) {
        var qm = str.lastIndexOf('?');
        var path = str.substr(0, qm + 1);
        var querystr = str.substr(qm + 1);
    
        var params = querystr.split('&');
        var keyIndex = -1;
        for (var i = 0; i < params.length; i++) {
            if (params[i].indexOf("key=") === 0) {
                keyIndex = i;
                break;
            }
        }
        if (keyIndex != -1) {
            params.splice(keyIndex, 1);
        }
    
        var result = path + params.join('&');
        return result;
    };
    
    var removeQueryString=函数(str){
    var qm=str.lastIndexOf(“?”);
    var path=str.substr(0,qm+1);
    var querystr=str.substr(qm+1);
    var params=querystr.split('&');
    var-keyIndex=-1;
    对于(变量i=0;i”它给出了一些语法错误。你得到的信息可能是错误的,所以考虑把它们放在你的问题中。解决你的问题了吗?
    
    var removeQueryString = function (str) {
        var qm = str.lastIndexOf('?');
        var path = str.substr(0, qm + 1);
        var querystr = str.substr(qm + 1);
    
        var params = querystr.split('&');
        var keyIndex = -1;
        for (var i = 0; i < params.length; i++) {
            if (params[i].indexOf("key=") === 0) {
                keyIndex = i;
                break;
            }
        }
        if (keyIndex != -1) {
            params.splice(keyIndex, 1);
        }
    
        var result = path + params.join('&');
        return result;
    };