我有一个问题,就是在某些情况下为链接找到正则表达式。这是场景:
我创建了utils.ts,它是一个打字稿。基本上,它将以API响应作为输入,并返回格式化的HTML支持的文本,例如粗体文本,电子邮件,图像,链接。
因此,让我们来看一个我面临的情况。
作为utils.ts文件的返回,我得到了这个。
https://www.google.com <a href="https://www.youtube.ca" target="_blank">Click here</a>
(注意:普通链接和'a'标签链接可以以任何顺序出现)
,您可以看到<a href="https://www.youtube.ca" target="_blank">Click here</a>
这部分已经在HTML支持的方法中。
所以我将在GUI上获得以下输出
因此,从这一点出发,我想要一个可以格式化https://www.google.com
的正则表达式,但是它不能操纵<a href="https://www.youtube.ca" target="_blank">Click here</a>
,因为它已经格式化了。
在这里,我还想按照以下格式设置https:///www.google.com
我面临的主要问题是当我用标签将“ https:// ..”替换为标签时,它还会替换“ href”内部的链接
<a href="https://www.google.com">Google</a> <a href="<a href="https://www.youtube.com">Google</a>">Click me</a>
我不想要什么。
请分享您对此的想法。
谢谢
答案 0 :(得分:2)
如果我的理解正确,您希望从文本中提取出现在文本中而不是链接的那些网址。如果是这样,请查看以下javascript:
//the data:
var txt1='https://www.google.com <a href="https://www.youtube.ca" target="_blank">Click here</a> http://other.domain.com';
// strip html tags
String.prototype.stripHTML = function () {
var reTag = /<(?:.|\s)*?>/g;
return this.replace(reTag, " ");
};
var txt2=txt1.stripHTML();
//console.log(txt2);
//split tokens
var regex1 = /\s/;
var tokens = txt2.split(regex1);
//console.log(tokens);
//build an address table
regex2=/^https?:\/\/.*/;
var i=0, j=0;
var addresses=[];
for (i in tokens) {
if (regex2.test(tokens[i])) {
addresses[j] = tokens[i];
j++;
}
i++;
}
console.log(addresses);
答案 1 :(得分:1)
还可以使用轮换找到尚未格式化的链接。这个想法是-如果链接被格式化,则它不会被捕获到组中(不要混淆正则表达式仍然可以找到某些东西-您只应查看 Group 1 )。否则,该链接将被捕获到一个组中。
下面的正则表达式非常简单,仅用于解释这个想法。您可能希望使用更好的URL搜索模式进行更新。
(?:href="https?\S+")|(https?\S+)