如何在字符串中的URL后提取文本?

时间:2019-12-11 17:39:02

标签: javascript regex

我有一个如下所示的文字

"Here is your result https://polo.felix.com/stat/content/table-1576073323.16.html Please click on the link to see more.."

现在我只想提取链接后面的文本 Please click on the link to see more..

现在,链接后可能没有任何文本,在这种情况下,我应该得到一个空字符串。

这就是我试图做的

message = "Here is your result https://polo.felix.com/stat/content/table-1576073323.16.html Please click on the link to see more.."

if(message.split('html')[1].trim() !== '') {
    do_something()
}

但这不是很优雅,如果链接以html以外的其他字符结尾,则将无法正常工作。

是否有regex可以获取文本中url右边的内容(如果存在)或返回空字符串?

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式(捕获组1的结果):

(?:https?:\/{2}\S+\s)(.*)

s = 'Here is your result https://polo.felix.com/stat/content/table-1576073323.16.html Please click on the link to see more..'
r = /(?:https?:\/{2}\S+\s)(.*)/
m = s.match(r)
if(m) console.log(m[1])

将以http://https://开头的URL匹配到下一个空格(包括下一个空格),然后将字符串的其余部分捕获到捕获组中。


或者您可以在ECMA2018 +(V8引擎+)中使用以下正则表达式-请参阅后置断言 here的浏览器兼容性:

(?<=https?:\/{2}\S+\s).*

s = 'Here is your result https://polo.felix.com/stat/content/table-1576073323.16.html Please click on the link to see more..'
r = /(?<=https?:\/{2}\S+\s).*/
m = s.match(r)
if(m) console.log(m[0])

与以前的正则表达式相同,只是在后面使用正向后保证URL优先而不是匹配。正则表达式匹配项是URL后面字符串的其余部分。

答案 1 :(得分:1)

尝试一下。

var str = 'Here is your result https://polo.felix.com/stat/content/table-1576073323.16.html Please click on the link to see more..'
var expr = /https?:\/\/\S+(.*)/g
var match = expr.exec(str)
console.log(match[1])