Javascript 如何仅更改div内容中尚未链接的电话号码?

Javascript 如何仅更改div内容中尚未链接的电话号码?,javascript,regex,dom,Javascript,Regex,Dom,我需要在一个div及其所有孩子的文本内容中找到所有电话号码,如果他们还没有被iOS Safari或创建页面内容的人制作成链接,那么就把他们制作成链接。我不知道如何找到电话号码,以及它是否已经是一个链接 我使用的代码只允许在innerHTML中查找电话号码并包装在链接标记中: div.innerHTML = div.innerHTML.replace( /(\(\d{3}\)(-|\.)?\d{3}(-|\.)?\d{4}|\d{3}(-|\.)?\d{3}(-|\.)?\d{4}|[0

我需要在一个div及其所有孩子的文本内容中找到所有电话号码,如果他们还没有被iOS Safari或创建页面内容的人制作成链接,那么就把他们制作成链接。我不知道如何找到电话号码,以及它是否已经是一个链接

我使用的代码只允许在innerHTML中查找电话号码并包装在链接标记中:

div.innerHTML = div.innerHTML.replace( 
    /(\(\d{3}\)(-|\.)?\d{3}(-|\.)?\d{4}|\d{3}(-|\.)?\d{3}(-|\.)?\d{4}|[0-9]{10,10})/g,
    "<a href=\"tel:$1\">$1</a>"
);
但是我如何判断它是否被包装在链接标签中,如果是,则跳过它呢?

这个怎么样

((\(\d{3}\)(-|\.)?\d{3}(-|\.)?\d{4}|\d{3}(-|\.)?\d{3}(-|\.)?\d{4}|[0-9]{10,10}))(?!["<])

这会在结尾处进行前瞻,以确保接下来的字符不是像href电话号码那样的引号,或是小于锚定标记结尾的引号。

我通过在结尾处添加一个用于关闭标记或引号的复选框来解决这一问题,这样就不会更改href:

(?![\s]*(\<\/a>|"|'))
整个正则表达式:

/(\(\d{3}\)(-|\.)?\d{3}(-|\.)?\d{4}|\d{3}(-|\.)?\d{3}(-|\.)?\d{4}|[0-9]{10,10})(?![\s]*(\<\/a>|"|'))/g

它还允许在电话号码和结束标记之间留有空白。

这不会转换被标记包围的电话号码,这是不正确的。但将结束搜索更改为结束标记可能会起作用