我意识到 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>
我不知道你在做什么,但我想提一下,以防它使你所做的假设无效。
关于javascript - 在javascript中用正则表达式解析html文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801509/