Regex, чтобы найти URL не в тегах - PullRequest
1 голос
/ 07 ноября 2011

Я ломаю голову над этим:

Я пытаюсь найти URL в Javascript с помощью регулярных выражений.

Обновление: я использую Javascript на стороне сервера, поэтому не могу пройти через DOM

(http:\/\/|https:\/\/|)(www\.)([a-zA-Z0-9]+\.[a-zA-Z0-9\-]+|[a-zA-Z0-9\-]+)\.[a-zA-Z\.]{2,6}(\/[a-zA-Z0-9\.\?=\/#%&\+-]+|\/|)/gi

Приведенный выше пример отлично работает.Но мне нужно изменить регулярное выражение, в котором URL-адреса не будут найдены: href="url" и не в <a ....>url</a>, а в чем-либо еще, например <p ...>url</p> или <div ....>text text text url, url, url text text</div>

Кто-нибудь может помочь?

Спасибо и ура Майкл

1 Ответ

0 голосов
/ 07 ноября 2011

Было бы проще, если бы вы позволили не-href url быть текстом элемента.По мере необходимости вам следует избегать любых дочерних узлов элементов a, если у вас есть текст, подобный URL-адресу в span или strong, или любой другой дочерний элемент оповещения a.

   function someurls(node){
        var A= [], tem, rx=/^https?\:\/\/[^\s]+/g;
        if(node){
            node= node.firstChild;
            while(node && node.tagName== 'A') node= node.nextSibling;
            while(node!= null){
                if(node.nodeType== 3){
                    if((tem= node.data.match(rx))!= null) A[A.length]= tem;
                }
                else A= A.concat(someurls(node));
                node= node.nextSibling;
                while(node && node.tagName== 'A') node= node.nextSibling;
            }
        }
        return A;
    }

// (someurls(document.body) .join ( '\ п')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...