簡體   English   中英

用javascript中的正則表達式解析html文本?

[英]parsing html text with regex in javascript?

我意識到HTML不能用正則表達式解析。 但是,我有一個字符串,其中包含來自典型亞馬遜網站的一些源代碼。

            <script type="text/javascript">
                P.when("A", "jQuery").execute(function(A, $) {
                    var pageState = A.state('ftPageState');
                    if (typeof pageState === 'undefined') {
                        pageState = {};
                    }
                    if (pageState["fast-track-message"]) {
                        pageState["fast-track-message"].stopTimer();
                    }

        <li> 48 pages</li>

                    pageState["fast-track-message"] = new fastTrackCountDown(20710,"fast-track-message");
                    A.state('ftPageState', pageState);
                });
            </script>

我想抓住48個數字。每個數字后面都有pages</li>如何匹配?

嘗試

var string_tester = String(datastuff.html());
var regex_tester = string_tester.match(/\d+ pages<\/li>/);

如果您知道它將始終位於列表元素中,請嘗試以下操作: (<li>\\s*)([0-9]+)(\\s*pages\\s*</li>) (48將在$2但是,這將不能容納數字格式,這應該足夠通用: (<li>\\s*)([0-9,\\.\\-\\(\\)]+)(\\s*pages\\s*</li>) 。我應該注意,亞馬遜有一個賣方和發行者API,根據您的用例,它們可能會為您提供更穩定的途徑。

編輯:我檢查了幾個亞馬遜頁面,看是否有更好的方法來獲取您想要的東西,並注意到對於我檢查的頁面沒有編號,僅此而已:

                <script type="text/javascript">
                P.when("A", "jQuery").execute(function(A, $) {
                    var pageState = A.state('ftPageState');
                    if (typeof pageState === 'undefined') {
                        pageState = {};
                    }
                    if (pageState["fast-track-message"]) {
                        pageState["fast-track-message"].stopTimer();
                    }
                    pageState["fast-track-message"] = new fastTrackCountDown(57592,"fast-track-message");
                    A.state('ftPageState', pageState);
                });
            </script>

我不知道您在做什么,但是我想提一下,以防它使您所做的假設無效。

您的嘗試接近了! 但是返回的是“ 48頁”而不是“ 48頁”。

  • 如果要為每個查詢匹配一個數字,請使用
    string_tester.match(/(\\d+) pages<\\/li>/)[1];
    注意捕獲的(('')'組
  • 要匹配多個數字:

 string_tester = "testing <li> 48 pages</li> now, and also testing <li> 52 pages</li>. see?"; regex_tester = string_tester.match(/\\d+ pages<\\/li>/g) .map(function(m){ return m.match(/\\d+/)[0]; // or return m.replace(/\\D/g, ""); }); document.getElementsByTagName('p')[0].innerHTML = regex_tester; 
 <p></p> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM