2014-10-28 172 views
0

好吧,所以我有這個小塊的代碼,應該掃描網站上的數字,但由於某種原因,我有一個預感,它根本沒有掃描。data.match(var)不工作似乎

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的變化,這就是爲什麼我把它設置,以捕獲數據。

+0

BTW:你爲什麼逃避''<' and '>字符(' \ <', '\>'?這是不必要的,因爲它們在正則表達式中沒有特殊用處 – hindmost 2014-10-28 13:36:11

+0

@ behindmost因爲這是在網站上掃描一個數字,並讓計算機瞭解它們在哪裏,所以我決定把它放進去,也許如果我拿出來,認爲這將有助於? – Mike 2014-10-28 13:37:36

+0

您的正則表達式應該匹配類似於 12345請問網站上的數字是否有格式化(空格或其他字符?) – blackmind 2014-10-28 13:38:22

回答

1

在您的正則表達式的前類是錯誤的,你正在尋找:

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

但正則表達式應該是

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

看看在類ATTR值之差

+0

好吧,我設法解決這個問題,但是如果'(PriceSelling <= PriceWanting){'仍然不起作用,不知道爲什麼。 – Mike 2014-10-28 13:47:15

+0

看到Rhumborl的答案,他只是一個更快的typer – blackmind 2014-10-28 13:49:31

2

你正則表達式通常很好,但是你以錯誤的方式使用結果。如果匹配,它將返回包含完整字符串和匹配號碼的結果。不只是數字。您只需要匹配索引1的號碼,因此您可以使用PriceSelling[1]

此外,在您的編輯中,您在spanclass="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("," , "")); 
} 
+0

你的變量命名建議是好的,但只是記錄的構造函數是'RegExp'。 – Pointy 2014-10-28 13:49:05

+0

對我來說是愚蠢的 – Rhumborl 2014-10-28 13:50:23

+0

但是現在我得到了一個'意想不到的令牌',如果'啊現在不得不再調試一些現在哈哈。 – Mike 2014-10-28 13:58:23

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