2013-08-10 4 views
0

хорошо я сделал скрипку на http://jsfiddle.net/Duayne/nFnEF/где я положил регулярное выражение

, и я наконец-то понял, как объединить свои части сценария и удалить ссылки:

function setRSSFeed() { 
    $('#test').rssfeed('http://www.riogrande.com/rss', { 
     limit: 4, 
     sort: 'title', 
     sortasc: true, 
     header: false, 
     date: false, 
     content: false, 
     snippet: false 
    }, function() { 
     $('#test h4 a').each(function() { 
      var $link = $(this); 
      $link.after($link.text()); 
      $link.remove(); 
     }); 
    }); 
} 

Теперь мне нужно вставить регулярное выражение

^.*\b(Gold|Silver)\b.*$ 

Так что я получу только первую и четвертую строки. Где я могу поместить эту строку в свой код?

Даже при этом мне все же придется выяснить, как удалить «Metal Price for (date) -«
от этих двух линий.

Любая помощь ... Любой ...?

+4

"где я положил регулярное выражение" --- ха-ха, вы может представить, что все здесь ответят на это. – zerkms

+0

Где вы хотите «получить первую и четвертую строки?» Как именно вы ожидаете предоставить ввод и получить результат? –

+0

Пожалуйста, включите соответствующий код в свой вопрос, не полагайтесь исключительно на ссылки на внешние сайты. Не поймите меня неправильно, при условии, что скрипка _good, _ но иногда сайт не работает, поэтому ... (Я отредактировал ваш вопрос, чтобы сделать ссылку jsfiddle доступной и скопировать код функции в вопрос, но, пожалуйста, не забудьте сделать это самостоятельно в следующий раз.) – nnnnnn

ответ

0

Вот один из способов использовать регулярные выражения, чтобы получить только две соответствующие строки:

 $('#test h4 a').each(function() { 
      var $link = $(this), 
       text = $link.text(); 
      if (/^.*\b(Gold|Silver)\b.*$/.test(text)) 
       $link.after(text); 
      $link.remove(); 
     }); 

То есть, в вашем .each() цикле вы можете удалить ссылку каждый раз, но до того, что только добавить текст, если элемент соответствует.

Демо: http://jsfiddle.net/nFnEF/1/

Чтобы удалить «Металл Цена ...» часть, вы можете сделать .replace() с другим регулярным выражением, который захватывает две части, которые вы хотите сохранить:

 var re = /^(Gold|Silver)[^-]+-\s?([\d.]+)$/; 
     $('#test h4 a').each(function() { 
      var $link = $(this), 
       text = $link.text(); 
      if (re.test(text)) 
       $link.after(text.replace(re,"$1 $2")); 
      $link.remove(); 
     }); 

В части шаблона в круглых скобках фиксируют совпадения, которые вы можете ссылаться в строке замены по числу.

Демо: http://jsfiddle.net/nFnEF/6/

+0

вот что мне не хватало «/» с обеих сторон. ОК, я думаю, что я следую, я хотел бы узнать больше о том, почему (угадав, что это о цикле), но продолжайте пока ... Первое решение - это замечательно! Второе решение, использующее группу захвата в качестве вывода, устраняет сегодняшние цены. Поэтому вместо $ 1 только - мне нужно добавить «+ (регулярное выражение для чисел доллара до 2 десятичных знаков)», было бы правильно? – Duayne

+0

oops писал, что неправильная «re» - это группа, поэтому INSTEAD из 1 доллара - это то, что я имел в виду ... это правильно? – Duayne

+0

'/' с каждой стороны является частью синтаксиса «регулярного выражения» JavaScript - ваше фактическое регулярное выражение проходит между ними. Извините, я неправильно понял, что вы хотели сохранить цену в конце - обновили ответ, чтобы сделать это. Или вот версия, которая хранит только два десятичных знака: http://jsfiddle.net/nFnEF/7/ – nnnnnn

0

http://jsfiddle.net/nabil_kadimi/nFnEF/3/

вы можете поставить регулярное выражение внутри $ .filter, как это:

$(document).ready(function() { 
    setRSSFeed(); 

    function setRSSFeed() { 
     $('#test').rssfeed('http://www.riogrande.com/rss', { 
      limit: 4, 
      sort: 'title', 
      sortasc: true, 
      header: false, 
      date: false, 
      content: false, 
      snippet: false 
     }, function() { 
      $('#test h4 a').each(function() { 
       var $link = $(this); 
       $link.after($link.text()); 
       $link.remove(); 
      }); 
      $('#test h4').filter(function() { 
        return !$(this).text().match('^(Gold|Silver)'); 
      }).remove(); 
     }); 
    } 



}); 
Смежные вопросы