Javascript将regex与classname匹配并返回Array中的innerHTML值

时间:2018-01-05 19:35:44

标签: javascript regex match

我正在尝试开发匹配每个Span标签的javascript代码,并使用类名'a-size-base a-color-price s-price a-text-bold',并在Array中返回它的innerhtml。所以基本上我需要数组列表中每个垃圾邮件的价格。

有人可以告诉我如何做这个,因为我不知道如何将匹配函数与classname放在一起并采用它的innerHTML。

<span class="a-size-base a-color-price s-price a-text-bold">EUR 16,90</span>
<span class="a-size-base a-color-price s-price a-text-bold">EUR 20,09</span> 
<span class="a-size-base a-color-price s-price a-text-bold">EUR 19,90</span> 
<span class="a-size-base a-color-price s-price a-text-bold">EUR 12,90</span> 

2 个答案:

答案 0 :(得分:1)

如果您的输入与提供的示例类似,则应该有效:

// Since .querySelectorAll returns a NodeList and we want an
// Array we'll use the spread operator to make it one.
let prices = [...document.querySelectorAll('span.size-a-base')]
  .map(el => {
    // sample input was EUR 19,90 so we'll split on the space
    // and grab the price.
    let [currency, price] = el.textContent.trim().split(' ');
    return price;
  });

答案 1 :(得分:0)

在这里,您可以使用正则表达式来获取span / class = value的价格 您正在寻找的是捕获组2。

/<span(?=(?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(?:(['"])\s*a-size-base\s*a-color-price\s*s-price\s*a-text-bold\s*\1))\s+(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>([\S\s]*?)<\/span\s*>/

(警告,使用正则表达式解析html可能很危险)

https://regex101.com/r/myziY9/1

刮刀系列
格式化:

 < span 
 (?=                                                           # Assertion (a pseudo atomic group)
      (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
      \s 
      class \s* = \s*                                               # class attribute
      (?:
           ( ['"] )                                                      # (1), # quote begin
           \s* 
           a-size-base \s* a-color-price \s* s-price \s* a-text-bold     # value to find
           \s* 
           \1                                                            # quote end
      )
 )
 \s+ 
 (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
 >
 ( [\S\s]*? )                                                  # (2), content
 </span \s* >