繁体   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