代码之家  ›  专栏  ›  技术社区  ›  krish

如何从url中删除“&”符号及其后的所有文本

  •  1
  • krish  · 技术社区  · 6 年前

    我有这个网址

    https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id1=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request
    

    我到了 sys_id 两次,参数不同。所以我需要移除第二个 & 签名和之后的所有文本。

    我试过这个

    location.href.split('&')[2] 
    

    我确信它不起作用。有人能提供更好的解决方案吗?

    7 回复  |  直到 6 年前
        1
  •  5
  •   Adeel Kirti Nariya    6 年前

    首先,你应该 split 将字符串放入数组中,然后使用 slice 设置元素的起始索引号,在您的案例中是2,然后 join 数组再次进入字符串。

    阅读有关这些方法的更多信息 JavaScript String split() Method , jQuery slice() Method JavaScript Array join() Method

    var url = 'https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';
    
    url = url.split("&").slice(0,2).join("&");
    console.log(url);
        2
  •  3
  •   mscdeveloper    6 年前

    可能是这样:

    var url='https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';
    
    var first=url.indexOf('&');
    var second=url.indexOf('&',first+1);
    var new_url=url.substring(0,second);
    console.log(new_url);
        3
  •  2
  •   Vikasdeep Singh    6 年前

    你需要找到第二次出现的 &sys_id . 从此以后删除所有文本。

    以下是工作代码:

    let url='https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';
    
    let str1=url.indexOf('&sys_id');
    let str2=url.indexOf('&sys_id',str1+1);
    console.log(url.substring(0,str2));
        4
  •  2
  •   theOneWhoKnocks    6 年前

    这有点冗长,但它处理所有重复的查询参数,而不管它们在URL中的位置如何。

    function removeDuplicateQueryParams(url) {
      var params = {};
      var parsedParams = '';
      var hash = url.split('#'); // account for hashes
      var parts = hash[0].split('?');
      var origin = parts[0];
      var retURL;
      
      // iterate over all query params
      parts[1].split('&').forEach(function(param){
        // Since Objects can only have one key of the same name, this will inherently
        // filter out duplicates and keep only the latest value.
        // The key is param[0] and value is param[1].
        param = param.split('=');
        params[param[0]] = param[1];
      });
      
      Object.keys(params).forEach(function(key, ndx){
        parsedParams += (ndx === 0)
          ? '?' + key +'='+ params[key]
          : '&' + key +'='+ params[key];
      });
      
      return origin + parsedParams + (hash[1] ? '#'+hash[1] : '');
    }
    
    console.log( removeDuplicateQueryParams('http://fake.com?q1=fu&bar=fu&q1=fu&q1=diff') );
    console.log( removeDuplicateQueryParams('http://fake.com?q1=fu&bar=fu&q1=fu&q1=diff#withHash') );
        5
  •  2
  •   UtkarshPramodGupta    6 年前

    var url = "https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id1=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request"
    url = url.slice(0, url.indexOf('&', url.indexOf('&') + 1));
    console.log(url);

    试试这个:)

        6
  •  1
  •   G Dillon    6 年前

    试试这个:

    var yourUrl = "https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request"
    var indexOfFirstAmpersand = yourUrl.search("&"); //find index of first &
    var indexOfSecondAmpersand = indexOfFirstAmpersand + yourUrl.substring((indexOfFirstAmpersand + 1)).search("&") + 1; //get index of second &
    var fixedUrl = yourUrl.substring(0, indexOfSecondAmpersand)
    $(".answer").text(fixedUrl);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p class="answer">
    </p>
        7
  •  1
  •   Tom O.    6 年前

    您可以使用 String.prototype.substring 方法。在下面的示例中,我创建了一个函数,它接受一个URL字符串并检查是否有重复的参数—它返回一个新字符串,删除了第二个匹配项。

    var url = "https://myApp-ajj.com/sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request";
    
    function stripDuplicateUrlParameter(url, parameterName) {
      //get the start index of the repeat occurrance
      var repeatIdx = url.lastIndexOf('sys_id');
      var prefix = url.substring(0, repeatIdx);
      var suffix = url.substring(repeatIdx);
      //remove the duplicate part from the string
      suffix = suffix.substring(suffix.indexOf('&') + 1);
    
      return prefix + suffix;
    }
    
    console.log(stripDuplicateUrlParameter(url));

    这就解决了您的特定问题,但是如果参数出现两次以上或者字符串的第二次出现不是紧接着出现在第一次之后,这就不起作用了——您可能会写一些更复杂的东西。

    正如有人已经问过的-为什么URL参数会在字符串中被复制?有什么方法可以解决这个问题吗?(因为在我看来,提出的问题是一个创可贴解决方案,因为这是 问题)。