Как фильтровать с помощью Regex и JavaScript? - PullRequest
0 голосов
/ 25 мая 2009

У меня есть некоторый текст в элементе на моей странице, и я хочу отменить цену на этой странице без какого-либо текста.

Я нашел страницу с такой ценой:

<span class="discount">now $39.99</span>

Как отфильтровать это и получить «39,99 $», просто используя JavaScript и регулярные выражения.

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

Ответы [ 4 ]

4 голосов
/ 25 мая 2009
<script language="javascript">
window.onload = function () {

    // Get all of the elements with class name "discount"
    var elements = document.getElementsByClassName('discount');

    // Loop over each <span class="discount">
    for (var i=0; i < elements.length; i++) {

         // get the text, e.g. "now $39.99"
         var rawText = elements[i].innerHTML;

         // Here's a regular expression to match one or more digits (\d+)
         // followed by a period (\.) and one or more digits again (\d+)
         var priceAsString = rawText.match(/\d+\.\d+/)

         // You'll want to make the price a floating point number if you 
         // intend to do any calculations with it.
         var price = parseFloat(priceAsString); 

         // Now what do you want to do with the price? I'll just write it out
         // to the console (using FireBug or something similar)
         console.log(price);

    }
}
</script>
3 голосов
/ 25 мая 2009
document.evaluate("//span[@class='discount']", 
  document, 
  null, 
  XPathResult.ANY_UNORDERED_NODE_TYPE, 
  null).singleNodeValue.textContent.replace("now $", "");

РЕДАКТИРОВАТЬ: Это стандартная XPath . Я не уверен, какое объяснение вы ищете. Для устаревших браузеров вам понадобится сторонняя библиотека, такая как Sarissa и / или Java-line .

1 голос
/ 25 мая 2009

Регулярные выражения в принципе плохо разбирают HTML (см. . Можете ли вы привести некоторые примеры того, почему трудно анализировать XML и HTML с регулярным выражением? , почему). Что вам нужно, это HTML-парсер. См. Можете ли вы привести пример разбора HTML с вашим любимым парсером? для примеров использования различных парсеров.

Ответы Патрика МакЭлхани и Мэттью Флэшена являются хорошими способами решения проблемы.

0 голосов
/ 26 мая 2009

как Мэттью Флэшен предложил , XPATH - лучший путь, если вы что-то знаете о структуре узлов целевого документа (и, поскольку вы предоставили пример, вам это кажется). Если вы не знаете структуру узла, регулярные выражения по-прежнему отвратительны для анализа XML.

еще несколько ресурсов, чтобы начать вас:

Я также обнаружил, что расширение FireFox DOM Inspector и XPather является неоценимым инструментом для получения и тестирования выражений XPath на данной странице. (Если вы используете другой браузер - ну, я не знаю).

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