簡體   English   中英

Javascript Regex:匹配模式后的文本

[英]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.

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