js中,看看这个正则怎么匹配?

新手上路,请多包涵
http://localhost:9000/detail.html?p=111&cat=222

我想通过一个正则,匹配到这个网址中的111,注意,只能是111
(注:p这个字段只能含有数字)
我写的正则是这样的

p=\d+(?=[&])

这样匹配到的结果是

p=111

我想把p=给去掉,也就是我不希望匹配到这个东西,怎么办?

阅读 1.6k
2 个回答

楼上的正则表达式只对你这一个例子适用,更具体的讲,它只在路由参数只有两个并且 p 是第一个的情况下适用。

js 里的正则是不支持判断“前面是 p=”这种条件的,所以要让结果完全只有 111 没有 p= 出现是不可能的。
但是有一种替代方案,只需要将你原来的正则稍微修改一点就可以实现:

url.match(/p=(\d+)(?=[&$])/);
// ["p=111", "111"]

这个数组的第二项就是你想要的东西。
这个正则表达式中,(\d+) 的括号会将括住的部分放进返回结果里。
另外注意我将你的 (?=[&]) 补充成了 (?=[&$]),这是要考虑 p 是最后一个参数的情况

希望对你有帮助

'http://localhost:9000/detail.html?p=111&cat=222'.match(/(?!p=)\d+(?=\&)/g);
//["111"]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题