2014-10-28 3 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

: 당신은'('<' and '>'문자를 이스케이프하는 이유 \ <', '\>'이것은 Regexps에서 특별한 용도가 없으므로 불필요합니다. – hindmost

+0

@hindmost 이것은 웹 사이트에서 번호를 검색하고 컴퓨터가 그 위치를 이해하도록하기 위해서 그걸 넣기로했습니다. 나는 그것을 꺼내. 그게 도움이 될 것이라고 생각하니? – Mike

+0

정규식은 12345와 일치해야합니다. 웹 사이트의 숫자는 어떤 형식을 사용합니까 (공백 또는 다른 문자입니까?) – blackmind

답변

1

당신의 정규식 전에서 클래스는 당신이 찾고있는 잘못된 :

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

하지만 정규식 클래스 ATTR 값의 차이에

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

살펴해야

+0

그래, 잘 해결할 수 있었지만 if (PriceSelling <= PriceWanting) { '여전히 작동하지 않는 것 같은데, 이유는 모르겠다. – Mike

+0

참조 Rhumborl 대답, 그는 단지 더 빠른 타이프입니다 – blackmind

2

당신에게 regex 일반적으로 괜찮지 만, 당신은 잘못된 방식으로 결과를 사용하고 있습니다. 일치하면 전체 문자열과 일치하는 숫자가 포함 된 결과를 반환합니다. 번호뿐 아니라 일치 색인 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

+0

그래, 그게 내 바보 였어 – Rhumborl

+0

하지만 지금은 좀 더 지금은 롤을 디버깅해야 할거야 '예기치 않은 토큰을 받고 있어요. – Mike

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 

여기를 체크 아웃 : BTW JSFiddle

관련 문제