在AppScript中用正则匹配HTML元素内最后出现的数字页码
解决方案
问题根源
你当前的正则存在三个核心问题:
- 转义处理错误:使用
new RegExp构造正则时,字符串内的反斜杠需要双重转义,原写法的转义逻辑混乱导致匹配失效。 - 未排除“下一页”按钮:没有过滤带有
next类的<a>标签,会误匹配到按钮链接里的数字(比如示例中的49)。 - 重复组捕获逻辑错误:带重复量词的非捕获组无法保留最后一次匹配的结果,捕获组会被覆盖。
修正后的正则与代码
我们需要精准匹配最后一个不带next类的page-numbers标签内的数字,以下是可行的实现:
function getTotalPages() { const url = 'https://example.com'; const response = UrlFetchApp.fetch(url); const html = response.getContentText(); // 匹配最后一个符合要求的页码标签 const regex = /.*<a class="page-numbers"(?!.*next)[^>]*>(\d+)<\/a>/; const match = html.match(regex); // 生成指定格式的结果 const result = match && match[1] ? `Total pages: ${match[1]}` : "Total pages: 0"; SpreadsheetApp.getActiveSheet().getRange('a2').setValue(result); }
正则逻辑说明
.*:贪婪匹配所有前置内容,确保定位到最后一个符合条件的页码标签<a class="page-numbers"(?!.*next):匹配带有page-numbers类但不包含next类的<a>标签,直接排除“下一页”按钮[^>]*>:匹配标签内的任意属性内容,直到标签结束(\d+):捕获标签内的数字页码<\/a>:匹配标签闭合部分
内容的提问来源于stack exchange,提问作者James Osborne
相关产品推荐
相关产品推荐

