Javascript 将文本转换为超链接<;a>;和图像标签<;img>;

Javascript 将文本转换为超链接<;a>;和图像标签<;img>;,javascript,Javascript,我使用此功能将文本转换为可点击链接(),将图像URL转换为img标记() const parsecontent=(text)=>{ var ishyperlink=/([^\S]|^)((https?\:\/\/)(\S+)/gi; 返回(文本| |“”)。替换(ishyperlink, 函数(匹配、空间、url){ var isimglink=/https?:\/\/.\(?:png|jpg|gif|jpeg)/i; if(url.match(isimglink)){ 返回空间+''; } 返

我使用此功能将文本转换为可点击链接(
),将图像URL转换为img标记(

const parsecontent=(text)=>{
var ishyperlink=/([^\S]|^)((https?\:\/\/)(\S+)/gi;
返回(文本| |“”)。替换(ishyperlink,
函数(匹配、空间、url){
var isimglink=/https?:\/\/.\(?:png|jpg|gif|jpeg)/i;
if(url.match(isimglink)){
返回空间+'';
}
返回空间+'';
}
);
}
像这样使用

const div=document.querySelector(“内容”);
div.innerHTML=parsecontent(div.innerHTML);
如果内容具有适当的空格,则效果良好。它的链接、图像URL没有用空格分隔,它失败了。你能帮我修一下吗

这里是代码笔


我提出了一个专门为满足您的测试用例而定制的正则表达式

此正则表达式是我们匹配URL的方式:

((https?\:\/\/)([\w!”$%&\'()*+,-./@:;=\ ^ `{124;}~]*))
在您的示例中,我们有两个url,中间没有空格。如果我们有一个url和一个非url字符串,中间没有空格,会发生什么?我们可以在匹配到达TLD时终止匹配(例如
.com
.org
,等等).但是,为了满足您的示例,我假设我们处理的是两个没有空格的url。在这种情况下,我们希望在注意到新url开始时终止匹配
(?=https?

([^\S]|^)((https?\:\/\/)([\w!”$%&\'()*+,-./@:;=\^ `{124;}~]*)(?=https?)
接下来,我们要匹配由空格包围的URL:

((https?\:\/\/)([\w!”$%&\'()*+,-./@:;=\ ^ `{124;}~]*))
综合所有这些,我们得到了这个正则表达式:

([^\S]|^)((https?\:\/\/)([\w!'$%&\'()*+,-./:;=\^ `{124}~]*)(?=https?)((https?\:\/\/)([\w!'$%&\'()*+,-./:;=\^ `{
我们还需要调整一下您的
替换
逻辑:

const parsecontent=(text)=>{
var-ishyperlink=/([^\S]\^)((https?\:\/\/)([\w!'$%&\'()*+,-./:;=\^{{124;}]*)(?=https?)((https?\:\/\)([\w!\\$%&'()*+,-./:;=\^{{{124}]*)/gi;
返回(文本| |“”)。替换(ishyperlink,
函数(url){
var isimglink=/https?:\/\/.\(?:png|jpg|gif|jpeg)/i;
if(url.match(isimglink)){
返回“”;
}
返回“”;
}
);
}

这个正则表达式非常冗长,可能有更简洁的方法来满足您的测试用例(尽管我不是正则表达式专家)

谢谢你的回答。但它不起作用。此更改使全文超链接。请使用codepen进行测试查看我的更新答案。我们有很多方法来匹配URL,例如匹配TLD,但我假设我们只处理不以空格分隔的链接。谢谢。现在开始工作。在e这将所有的“http”替换为“http”,然后使用regex。如果我理解的话,只需从([^\S]|^)中删除第二个
^
。而使用连接的链接是个问题。您可以添加end with.com,但这并不好。