簡體   English   中英

javascript查找協議,域,加上來自src標記的regexp的第一個斜杠,替換為空字符串

[英]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? - httphttps子字符串
  • :\\/\\/ - 一個文字序列://
  • [^\\/]+ - 除了/之外的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM