求正则,从地址中提取指定数字

要根据如下格式,提取数字

https://ad.doubleclick.net/ddm/adi/N46002.2484100FUELX0/B{campaign_id}.{placement_id};dcopt=1_ist;dcapp=1;sz={width}x{height};ord=[timestamp]

比如字符串

"https://ad.doubleclick.net/ddm/adi/N46002.2484100FUELX0/B22585701.247364935;dcopt=1_ist;sz=300x50;ord=[timestamp]"

期望结果:
campaign_id = 22585701
placement_id = 247364935
width = 300
height = 50

最好用JS实现

阅读 2.4k
2 个回答

/B([\d+]+).([\d+]+).*sz=([\d+]+)x([\d+]+)/

const str = 'https://ad.doubleclick.net/ddm/adi/N46002.2484100FUELX0/B22585701.247364935;dcopt=1_ist;sz=300x50;ord=[timestamp]'

const matches = str.match(/B([\d+]+).([\d+]+).*sz=([\d+]+)x([\d+]+)/)

console.log(matches[1])  // "22585701"
console.log(matches[2])  // "247364935"
console.log(matches[3])  // "300"
console.log(matches[4])  // "50"

你这个结合路径处理要简化很多,因为可以利用/过滤出最后的部分,再用规则式提取,这样更好。
比如

var str = 'https://ad.doubleclick.net/ddm/adi/N46002.2484100FUELX0/B22585701.247364935;dcopt=1_ist;sz=300x50;ord=32432531535';
var index = str .lastIndexOf("\/");  
str  = str .substring(index + 1, str .length);
var matches = str.match(/B([\d+]+).([\d+]+).*sz=([\d+]+)x([\d+]+)/);

不过一般生成这样的URI,后台都有对应处理模式的,你如果能取到可能更方便。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题