regex 使用JavaScript获取标签之间的文本

z9smfwbn  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(93)

我试图从跨度标签之间获得价格。我想把所有的价格都放在一个数组中。我似乎不能让它工作,我猜我的正则表达式是不正确的。
我正在寻找任何span标签与类的'blog',该标签没有其他属性集,只有一个类。例如<span class="amount">&pound;9.99</span>

var prices = resp.fragments['data'].match(/<span class=\"amount\">(.*?)<\/span>/g)
    .map(function(val){
      return val;
});

输出
[ '&pound;9.99', '&pound;100.00' ]
我试图从跨度标签之间获得价格。我想把所有的价格都放在一个数组中。我似乎不能让它工作,我猜我的正则表达式是不正确的。
我正在寻找任何span标签与类的'blog',该标签没有其他属性集,只有一个类。例如<span class="amount">&pound;9.99</span>

var prices = resp.fragments['data'].match(/<span class=\"amount\">(.*?)<\/span>/g)
    .map(function(val){
      return val;
});

输出
[ '&pound;9.99', '&pound;100.00' ]

  • 更新 *

结果发现它是一个编码,响应为resp.fragments['data']
我使用正则表达式,因为它是我以前在JS中没有真正使用过的东西,并认为我会有一个发挥。我确实看了很多例子,大约45分钟后没有成功,我想一双新的眼睛会解决它。

wlp8pajw

wlp8pajw1#

虽然正则表达式可以做到这一点,但简单地选择<span class='amount'>元素并通过map()函数将其innerHTML内容Map到数组可能更容易:

// This would yield an array containing your values
var amounts = Array.prototype.slice
                             .call(document.querySelectorAll('span.amount'))
                             .map(function(a){ return a.innerHTML; });

你可以see a working example of this demonstrated here

ct2axkht

ct2axkht2#

最简单的方法是将其添加到一个不可见的DOM对象中,然后通过DOM API遍历它

var text  = '<span class="amount">&pound;9.99</span><span class="amount">&pound;9.99</span>'

//现在将其附加到DOM对象

var wrapperDiv = "<div style='display:none' id='tmpDiv'>" + text + "</div>";
document.body.innerHTML += wrapperDiv;

var elements = document.querySelectorAll( "#tmpDiv amount" );
var output = Array.prototype.slice.call( elements ).map( function(val){
  return val.innerText;
})

另一种方法可以是split文本<span class="amount">,并获得第一个索引后的值
演示

var text  = '<span class="amount">&pound;9.99</span><span class="amount">&pound;9.99</span>'
    var output = [];
text.split('<span class="amount">').forEach( function(val, index) {
   if (index > 0 )
   {
      output.push( val.replace( "</span>", "" ) );
   }
});

document.body.innerHTML += JSON.stringify( output, 0, 4 );
xqk2d5yq

xqk2d5yq3#

你可以用这个代替。

var prices = document.getElementsByClassName('amount');
var price_array = [];

for (i= 0; i < prices.length; ++i) {
    price_array.push(prices[i].innerHTML);
}

document.write(" | " + price_array);
<span class='amount'>&pound;123</span>
<span class='amount'>&pound;3</span>
<span class='amount'>&pound;5</span>
<span class='amount'>&pound;64</span>

你不需要使用正则表达式或jQuery。

相关问题