【问题标题】:Javascript Regex - Match everything after string [duplicate]Javascript Regex - 匹配字符串后的所有内容[重复]
【发布时间】:2017-02-01 16:03:26
【问题描述】:

我正在尝试使用 JS 正则表达式在我的 url 中的字符串之后删除所有内容。例如www.myurl/one/two/three/?a=b&c=d 我想删除字符串“three/”之后的所有内容。我将如何编写一个正则表达式来匹配这个?

【问题讨论】:

  • 必须使用正则表达式吗?找到那个单词在字符串中的位置并在那里切开是一件微不足道的工作。
  • str.split('three/')[0]+'three/';
  • 要删除“三”之后的所有内容,还是要删除查询参数?
  • 不要将其视为“在字符串之后删除所有内容”,而应将其视为“删除所有以字符串开头的内容”。
  • 不知道为什么这被否决或标记为“重复”,因为在字符串出现后删除所有内容与从 URL 中删除查询字符串不同。

标签: javascript regex


【解决方案1】:

试试这个:

function getPathFromUrl(url) {
  return url.split("?")[0];
}

var url = 'www.myurl/one/two/three/?a=b&c=d';
var result = getPathFromUrl(url);
alert(result);

【讨论】:

  • 他说他想在三点之后放下所有东西。所以这样他也能得到结果。
  • 三个之后,我们将拥有的任何参数都可以传递给将返回参数值的函数。
  • 感谢您让我理解。我又编辑了。我以为他想要三个之后的查询字符串。我再次阅读了他的问题,然后编辑了答案。
【解决方案2】:

这是一种快速的方法。

var str = 'www.myurl/one/two/three/?a=b&c=d'

var newStr = str.replace(/(.*\/three\/).*/, '$1')

alert(newStr)

【讨论】:

    【解决方案3】:

    使用内置功能来操作 URL。

    var a = document.createElement('a');
    a.href = "http://www.myurl/one/two/three/?a=b&c=d";
    a.search = '';
    console.log(a.href);

    注意事项:

    1. a 元素的search 属性指的是以问号开头的部分。

    2. 这里需要http://;否则,该 URL 将被解释为相对于当前 URL。

    如果您更喜欢使用正则表达式,那么您可以删除以问号开头的所有内容:

    "www.myurl/one/two/three/?a=b&c=d".replace(/\?.*/, '')
    

    或者,您可以匹配您想要保留的内容,例如直到问号的所有内容,使用:

    "www.myurl/one/two/three/?a=b&c=d".match(/.*(?=\?)/)[0]
    

    您需要[0],因为match 返回一个数组,其第一个元素是整个匹配项。这里的?=前瞻。其实是一样的

    "www.myurl/one/two/three/?a=b&c=d".match(/[^?]+/)[0]
    

    或者,如果您想专门匹配three/

    "www.myurl/one/two/three/?a=b&c=d".match(/.*three\//)[0]
    

    【讨论】:

      【解决方案4】:

      或者基本上使用 String 和 Array 的方法:

      var string = "www.myurl/one/two/three/?a=b&c=d";
      var array = string.split('/');
      array.pop();
      var result = array.join("/");
      console.log(result); //www.myurl/one/two/three
      

      【讨论】:

      • 如果three 后面没有跟斜杠(这是一种完全有效的 URL 格式),这将失败。
      • 所以你可能想用[?\/]分割。
      • @torazaburo 如果 URL 没有查询字符串 最后一个斜杠,这将失败。
      • @vlaz 是的,它肯定会。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2018-10-28
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多