data.match(var)似乎没有工作

时间:2014-10-28 13:33:45

标签: javascript regex

好的,所以我有一小段代码,应该扫描一个网站上的数字,但由于某种原因,我有预感,它根本就没有扫描。

var Regex = /\<span class="currency-robux" data-se="item-privatesale-price">([\d,]+)\<\/span\>/;
                    var PriceSelling = data.match(Regex);
                    PriceSelling = Number(PriceSelling.replace("," , ""));

我对此有什么不妥吗?

这与if声明

相关联
if (PriceSelling <= PriceWanting) {

从那里调用一个函数来运行,但由于某种原因它似乎没有运行。所以我认为Regex是错误的但不确定如何。 (PriceWanting有一个变量;这只是代码本身的一个片段。)

在网站上,这就是我想要提取的内容。

<span class="robux " data-se="item-privatesale-price">115</span>

请记住item-privatesale-price更改,这就是我将其设置为捕获该数据的原因。

3 个答案:

答案 0 :(得分:2)

你的正则表达式通常很好,但是你以错误的方式使用结果。如果匹配,它将返回包含完整字符串和匹配数字的结果。不只是数字。您只需要数字,即匹配索引1,这样您就可以使用PriceSelling[1]

同样在您的修改中,您在span上与class="robux "匹配,这显然与您的正则表达式不同。如果您只对data-se="item-privatesale-price"感兴趣,可以将其更改为与其中包含该属性的标记相匹配。

var data = '<span class="robux " data-se="item-privatesale-price">115</span>';

// matches a span with the data-se attribute within it
// i.e. appears before the closing >
var Regex = /\<span[^>]* data-se="item-privatesale-price"[^>]*>([\d,]+)\<\/span\>/;

var PriceSelling = 0;

var PriceSellingMatch = data.match(Regex);
if(PriceSellingMatch != null) {
    PriceSelling = Number(PriceSellingMatch[1].replace("," , ""));
}

答案 1 :(得分:1)

你正在寻找的正则表达式中的类是错误的:

/\<span class="currency-robux" data-se="item-privatesale-price">([\d,]+)\<\/span\>/

但正则表达式应该是

/\<span class="robux " data-se="item-privatesale-price">([\d,]+)\<\/span\>/

查看类attr值的差异

答案 2 :(得分:0)

正则表达式不适合解析HTML,你可以这样做:

var div = document.createElement("div");
div.innerHTML = YOUR_HTML_STRING;

var price = parseInt(div.querySelector("[data-se='item-privatesale-price']").innerHTML);

console.log(price);  // => 115

请在此处查看:JSFiddle