You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配data-p标签内的数字列表?

解决方案

完全可以实现,两种思路任选:

1. 分步处理(先捕获data-p属性内容,再提取数字)

先匹配出整个data-p属性的内容,再从捕获到的内容里提取所有数字,逻辑更清晰:

  • 第一步正则(匹配data-p属性值):
    data-p="([^"]+)"
    
    捕获组1会得到类似["123","456","789"]的字符串。
  • 第二步正则(从捕获内容中提取数字):
    "(\d+)"
    
    开启全局匹配(g标志),就能捕获到所有数字字符串,最后把它们组装成纯数字数组即可。

2. 单个正则直接提取所有目标数字

如果想用单个正则搞定,可以利用正向断言+全局匹配,直接定位到data-p属性内的所有数字:

(?<=data-p="\[&quot;|\G,&quot;)(\d+)(?=&quot;(?:,|\]))
  • 解释:
    • (?<=data-p="\[&quot;|\G,&quot;):正向后查,确保当前位置要么是data-p="["&quot;的后面,要么是上一个匹配结果的,&quot;后面,保证只匹配data-p属性内的数字。
    • (\d+):捕获数字本身。
    • (?=&quot;(?:,|\])):正向预查,确保数字后面是&quot;加逗号或右括号,保证是合法的列表项。

示例代码(JavaScript)

const html = '<div data-p="[&quot;12&quot;,&quot;34&quot;,&quot;56&quot;]"></div>';

// 分步处理
const dataPRegex = /data-p="([^"]+)"/;
const match = html.match(dataPRegex);
if (match) {
  const numRegex = /&quot;(\d+)&quot;/g;
  const nums = [];
  let numMatch;
  while ((numMatch = numRegex.exec(match[1])) !== null) {
    nums.push(Number(numMatch[1]));
  }
  console.log(nums); // [12, 34, 56]
}

// 单个正则全局匹配
const singleRegex = /(?<=data-p="\[&quot;|\G,&quot;)(\d+)(?=&quot;(?:,|\]))/g;
const nums = Array.from(html.matchAll(singleRegex), m => Number(m[1]));
console.log(nums); // [12, 34, 56]

内容的提问来源于stack exchange,提问作者nicolattu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:10:27