使用javascript

时间:2016-05-06 14:08:28

标签: javascript regex

我试图从span标签之间获取价格。我想将所有价格都放在一个数组中。我似乎无法让它工作,我猜我的正则表达式是不正确的。

我正在寻找具有类&#39; amount&#39;的任何span标签,该标签没有设置其他属性且只有一个类。例如。 <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标签之间获取价格。我想将所有价格都放在一个数组中。我似乎无法让它工作,我猜我的正则表达式是不正确的。

我正在寻找具有类&#39; amount&#39;的任何span标签,该标签没有设置其他属性且只有一个类。例如。 <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' ]

*更新*

原来这是一个带有ajax响应resp.fragments['data']的编码。

我正在使用正则表达式,因为这是我之前在JS中没有真正使用的东西,并且我认为我会有一个游戏。我确实看了很多例子,大约45分钟后没有成功,我认为一套新的眼睛会修复它。

@spaceman 感谢您的帮助评论。你是其中一个人,如果有人问过&#34;家里有医生吗?&#34;,你会站起来说'#34;甜蜜的负荷那里有很多医生和#34;。 / p>

3 个答案:

答案 0 :(得分:2)

虽然正则表达式可以解决此问题,但只需选择<span class='amount'>元素并通过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

答案 1 :(得分:0)

您可以改用它。

&#13;
&#13;
<span class='amount'>&pound;123</span>
<span class='amount'>&pound;3</span>
<span class='amount'>&pound;5</span>
<span class='amount'>&pound;64</span>
&#13;
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) where
    FromA: Default + Extend<A>,
    FromB: Default + Extend<B>,
    Self: Sized + Iterator<Item=(A, B)>,
{
    struct SizeHint<A>(usize, Option<usize>, marker::PhantomData<A>);
    impl<A> Iterator for SizeHint<A> {
        type Item = A;

        fn next(&mut self) -> Option<A> { None }
        fn size_hint(&self) -> (usize, Option<usize>) {
            (self.0, self.1)
        }
    }

    let (lo, hi) = self.size_hint();
    let mut ts: FromA = Default::default();
    let mut us: FromB = Default::default();

    ts.extend(SizeHint(lo, hi, marker::PhantomData));
    us.extend(SizeHint(lo, hi, marker::PhantomData));

    for (t, u) in self {
        ts.extend(Some(t));
        us.extend(Some(u));
    }

    (ts, us)
}
&#13;
&#13;
&#13;

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

答案 2 :(得分:0)

最简单的方法是将它添加到一个不可见的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 );