我有一个变量返回如下网址: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 = ''
答案 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
是可选的,因为您说它可以是http
或https
。正斜杠需要“转义”(带有黑斜杠),这样它们才不会与我们的定界符冲突,正如我们所讨论的,它们也是正斜杠。[^\/]+
说:“从那时起,匹配所有非正斜杠”(再次必须转义。)因此,它将一直上升到第一个“ bla”之前的斜杠“。总而言之,我们将删除网址pathname部分之前的所有内容。