仅从不同的基本URL获取子字符串

时间:2019-01-09 11:53:27

标签: javascript string

我有一个变量返回如下网址:https://abc.example.com/bla/bla/123/bla其中abc1.example在每种情况下都不相同(也可以是http而不是https)。 / p>

我希望它仅返回/bla/bla/123/bla,为此,我尝试了以下操作:

renamedObj.context_page_path = renamedObj.context_page_url.replace(new RegExp(renamedObj.context_page_url, 'g'), '').replace('https://', '').replace('http://', '');

但是只给我一个空字符串:context_page_path = ''

1 个答案:

答案 0 :(得分:2)

您需要替换所有内容,从开始到第一个不属于协议的斜杠。

renamedObj.context_page_url.replace(/^https?:\/\/[^\/]+/, '');

您当前的尝试是返回一个空字符串,因为您基本上是在告诉它用什么都不替换整个字符串。它等于:

'foo'.replace('foo', ''); //""

[编辑-REGEX模式说明]

好的,让我们看一下/^https?:\/\/[^\/]+/

首先,开始和结束/是定界符。他们告诉JavaScript,两者之间包含的内容应解释为REGEX模式,而不是字符串。

有两种定义REGEX模式的方法-在这种情况下为REGEX literal ,而通过new RegExp(string)的动态模式。有关两者之间的区别,请参见my other answer

模式本身也是如此:

  • ^告诉JS匹配必须从字符串的开头开始;仅在字符串中 somewhere 出现匹配项是不可接受的;必须从一开始就可以
  • https?:\/\/与协议匹配。 ?之后的s表示s是可选的,因为您说它可以是httphttps。正斜杠需要“转义”(带有黑斜杠),这样它们才不会与我们的定界符冲突,正如我们所讨论的,它们也是正斜杠。
  • [^\/]+说:“从那时起,匹配所有非正斜杠”(再次必须转义。)因此,它将一直上升到第一个“ bla”之前的斜杠“。

总而言之,我们将删除网址pathname部分之前的所有内容。