[英]javascript find protocol, domain, plus first slash with regexp from a src tag, replace with empty string
我試圖為這個任務構建一個正則表達式,但我擔心我仍然沒有對regexp有直觀的理解。
問題是正則表達式匹配,直到字符串中的最后一個斜杠。 我希望它在字符串的第一個匹配處停止。
我對正則表達式的可憐嘗試:
/^http(s?):\/\/.+\/{1}/
考試科目:
http://foo.com/bar/test/foo.jpeg
目標是獲得bar/test/foo.jpeg
,這樣我就可以拆分字符串,彈出最后一個元素然后加入其余元素,從而獲得JavaScript文件的路徑。
例
var str = 'http://foo.com/bar/test/foo.jpeg';
str.replace(regexp,'');
雖然另一個答案顯示了如何匹配字符串的一部分,但我認為替換解決方案更適合當前任務。
你遇到的問題是.+
貪婪地匹配換行符以外的一個或多個字符,也就是說,一次性抓取所有字符串,然后正則表達式引擎開始回溯(沿輸入字符串向后移動尋找/
在比賽中容納)。 因此,你從http
到最后一個/
得到匹配。
要將匹配從http
限制為第一個/
使用否定字符類 [^/]+
而不是.+
。
^https?:\/\/[^\/]+\/
^^^^^^
請參閱正則表達式演示
請注意,您不需要將s
放入捕獲組以使其成為可選的,未轉義的?
是一個量詞,使前一個字符匹配一次或零次。 此外, {1}
是一個冗余量詞,因為這是默認行為, c
只匹配1 c
, (?:something)
只匹配一個something
。
var re = /^https?:\\/\\/[^\\/]+\\//; var str = 'http://foo.com/bar/test/foo.jpeg'; var result = str.replace(re, ''); document.getElementById("r").innerHTML = result;
<div id="r"/>
請注意,您需要將替換結果分配給某個變量,因為在JS中,字符串是不可變的。
正則表達式解釋 :
^
- 字符串的開頭 https?
- http
或https
子字符串 :\\/\\/
- 一個文字序列://
[^\\/]+
- 除了/
之外的1個或多個字符 \\/
- 文字/
符號 使用基於捕獲組的正則表達式。
> var s = "http://foo.com/bar/test/foo.jpeg"
> s.match(/^https?:\/\/[^\/]+((?:\/[^\/]*)*)/)[1]
'/bar/test/foo.jpeg'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.