[英]Javascript Regex: match text after pattern
我有一個表單的文本,其中有段落的文本與網址穿插。 我想解析字符串從網址創建html鏈接並使用以下文本作為描述性鏈接文本,即
possibly some text here http://www.somewebsite.com/some/path/somepage.html descriptive text which may or may not be present
成
<a href="http://www.somewebsite.com/some/path/somepage.html">descriptive text which may or may not be present</a>
這篇SO文章, JS:在Text中創建URL,Make Links ,與我正在嘗試做的事情相關,但只是將url作為文本放在anchor元素中。
我成功地將網址與。匹配
var urlRE= new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?([^ ])+");
但我不確定如何在賽后進行比賽。
我遇到了這個帖子正則表達式 - 匹配某些字符似乎適用的文字 。 我試圖將我的RE包裝在/(?<=my url pattern here).+/
但是得到一個錯誤,指出存在一個無效的組,這會導致RE無效。
在那篇文章中,J-Law提到了這一點
不允許使用可變長度的lookbehinds
這是我試圖做的嗎?
由於我已經匹配了網址,我覺得我可以輕松地做一些子字符串數學來獲得所需的結果。
我只是想用它來試圖了解有關正則表達式的更多信息。
謝謝
只需添加另一個捕獲組即可捕獲最后的所有內容,並使內部組無法捕獲。 就像是:
var urlRE= new RegExp("((?:[a-zA-Z0-9]+://)?(?:[a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?(?:[a-zA-Z0-9.-]+\\\\.[A-Za-z]{2,4})(?::[0-9]+)?(?:[^ ])+)(.*)$"); var s = "possibly some text here http://www.somewebsite.com/some/path/somepage.html descriptive text which may or may not be present" var match = urlRE.exec(s); alert(match[0] + "\\n\\n" + match[1] + "\\n\\n" + match[2]); // Returns: // ["http://www.somewebsite.com/some/path/somepage.html descriptive text which may or may not be present", // "http://www.somewebsite.com/some/path/somepage.html", // " descriptive text which may or may not be present"]
我將你的整個正則表達式括在括號()
以形成第一個捕獲組,並且在里面我使所有現有的組都沒有被捕獲?:
,你不是絕對需要這樣做(使它們不捕獲),但它確實簡化了輸出。 然后我再添加一個組(.*)
來捕獲其他所有內容,直到字符串$
結束。
在.exec
之后如果你有匹配,你的匹配將在[0]
,url部分將在[1]
,其余部分將在[2]
。 這就是為什么我們使用非捕獲組,因為否則你會有一堆其他捕獲可能有用也可能沒用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.