2013-11-19 3 views
0

У меня есть следующий списокJQuery RegEx в If-заявление

<li class='lists'>Sonata</li> 
<li class='lists'>http://facebook.com</li> 
<li class='lists'>Omega</li> 
<li class='lists'>Rule of Thumb</li> 
<li class='lists'>https://youtube.com</li> 

Я хочу, чтобы обернуть только текст, который содержит http:// или https:// со ссылкой URL. Итак, что я делаю в данный момент в JQuery является:

if ($('li.lists:contains(http://)') || ('li.lists:contains(https://)')) { 
    $('li.lists:contains(http://)').wrapInner(function() { 
     return "<a href='" + $(this).text() + "'></a>"; 
    }); 

    $('li.lists:contains(https://)').wrapInner(function() { 
     return "<a href='" + $(this).text() + "'></a>"; 
    }); 
} 

Как вы можете видеть, только для одного символа s в ссылке, я должен использовать or || заявление и вызвать функцию wrapInner() дважды.

Можно ли добиться этого с использованием регулярных выражений в JQuery с лайнеры как

if ($('li.lists:contains(http/?s/://)')) { 

ИЛИ

$('li.lists:contains(http/?s/://)') 

что-то вроде этого.

JsFiddle для вышеуказанных кодов.

+0

Вы могли бы сделать '.test()' на текст в 'li'. Например. 'RegEx.test (listItem1.text())'. 'test()' возвращает логическое значение, если переданный аргумент передает регулярное выражение. –

ответ

1

fiddle Demo

$('li.lists').html(function (_, html) { 
    return html.replace(/((?:http|https):\/\/.+)$/g, '<a href="$1">$1</a>'); 
}); 


fiddle Demo

var urlPattern = new RegExp("(http|https)://"); 
$('li.lists').filter(function (_, str) { 
    return urlPattern.test(str.innerHTML); 
}).wrapInner(function() { 
    return "<a href='" + $(this).text() + "'></a>"; 
}); 
+0

Я ищу документацию api для '.test()' не удалось найти. Может быть, вы знаете это лучше, это работает в IE8? –

+0

@JhilkeDai Читать [.test()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test) –

+1

Этот один лайнер с 'html.replace() 'is boner .... большое спасибо –