用javascript中的正则表达式解析html文本?

用javascript中的正则表达式解析html文本?,javascript,regex,Javascript,Regex,我意识到HTML不能用正则表达式解析。但是,我有一个字符串,其中包含来自典型amazon网页的一些源代码 <script type="text/javascript"> P.when("A", "jQuery").execute(function(A, $) { var pageState = A.state('ftPageSta

我意识到HTML不能用正则表达式解析。但是,我有一个字符串,其中包含来自典型amazon网页的一些源代码

            <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>
        
        

P.when(“A”,“jQuery”).execute(函数(A,$){
var pageState=A.state('ftPageState');
如果(页面状态的类型==='undefined'){
pageState={};
}
如果(页面状态[“快速跟踪消息”]){
pageState[“快速跟踪消息”]。stopTimer();
}
  • 48页
  • pageState[“快速跟踪消息”]=新的快速跟踪倒计时(20710,“快速跟踪消息”); A.state('ftPageState',pageState'); });
    我想拿48。每个数字后面都会有
    页面
    我怎样才能配得上这个

    企图
    var string_tester=string(datastaff.html());
    var regex_tester=string_tester.match(/\d+pages/);
    
    如果您知道它将始终位于列表元素中,请尝试以下操作:
  • \s*)([0-9]+)(\s*pages\s*
  • (48将是
    $2
    。但是,这不适合数字格式。这应该足够通用:
  • \s*)([0-9,\.\.-\-\(\])+)(\s*pages*
  • 。我应该注意,亚马逊有一个销售商和出版商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>
    
    
    P.when(“A”,“jQuery”).execute(函数(A,$){
    var pageState=A.state('ftPageState');
    如果(页面状态的类型==='undefined'){
    pageState={};
    }
    如果(页面状态[“快速跟踪消息”]){
    pageState[“快速跟踪消息”]。stopTimer();
    }
    pageState[“快速跟踪消息”]=新的快速跟踪倒计时(57592,“快速跟踪消息”);
    A.state('ftPageState',pageState');
    });
    

    我不知道您在做什么,但我想说的是,如果它使您所做的假设无效。

    如果您知道它将始终位于列表元素中,请尝试以下操作:
  • \s*)([0-9]+)(\s*页面\s*
  • (48将是
    $2
    。但是,这不适合数字格式。这应该足够通用:
  • \s*)([0-9,\.\-\(\)]+)(\s*pages\s*
  • 。我应该注意,亚马逊有一个销售商和发布商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>
    
    
    P.when(“A”,“jQuery”).execute(函数(A,$){
    var pageState=A.state('ftPageState');
    如果(页面状态的类型==='undefined'){
    pageState={};
    }
    如果(页面状态[“快速跟踪消息”]){
    pageState[“快速跟踪消息”]。stopTimer();
    }
    pageState[“快速跟踪消息”]=新的快速跟踪倒计时(57592,“快速跟踪消息”);
    A.state('ftPageState',pageState');
    });
    

    我不知道你在做什么,但我想提一提,以防它使你所做的假设无效。

    你的尝试很接近!但返回的是“48页”,而不是“48页”。

    • 如果希望每个查询匹配一个数字,请使用
      string\u tester.match(/(\d+)页/)[1];

      请注意捕获的“(“”)”组
    • 要匹配多个数字:
    string_tester=“现在测试
  • 48页
  • ,同时测试
  • 52页
  • 。请参阅”; regex\u tester=string\u tester.match(/\d+pages/g) .map(功能(m){ 返回m.match(//\d+/)[0];//或返回m.replace(//\d/g,“”); }); document.getElementsByTagName('p')[0].innerHTML=regex\u tester;

    您的尝试已接近成功!但返回的是“48页”,而不是“48页”。

    • 如果希望每个查询匹配一个数字,请使用
      string\u tester.match(/(\d+)页/)[1];

      请注意捕获的“(“”)”组
    • 要匹配多个数字:
    string_tester=“现在测试
  • 48页
  • ,同时测试
  • 52页
  • 。请参阅”; regex\u tester=string\u tester.match(/\d+pages/g) .map(功能(m){ 返回m.match(//\d+/)[0];//或返回m.replace(//\d/g,“”); }); document.getElementsByTagName('p')[0].innerHTML=regex\u tester;

    谢谢你提供的信息。你有一个很好的观点。我遇到了这个问题。因此获得ISBN通过他们的API似乎是一个很好的途径。谢谢你提供的信息。你有一个很好的观点。我遇到了这个问题。因此获得ISBN通过他们的API似乎是一个很好的途径。