匹配url的正则表达式问题

如下正则表达式居然能成功配置url中的key,(^|)的意思不是开始或空吗,怎么能匹配&呢,是哪里理解错了呢?
正则

(^|)rsv_bp=([^&]*)(|$)

url字符串

?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F&rsv_pq=eeeb21a20001f388&rsv_t=4ba6XCweLIFwqACbIt7eT8yuqYQfNU7ZJNTlLenvEtVVFm4jVEnL5O48Ze0&rqlang=cn&rsv_enter=1&rsv_sug3=6&rsv_sug1=6&rsv_sug7=100

正则能匹配到rsv_bp=0

阅读 2.4k
3 个回答
(^|)的意思不是开始或空吗,怎么能匹配&呢,是哪里理解错了

(^|)等于是废话,去掉无妨,因为(^|)匹配行首或任意一个位置,任意一个位置包括了行首,也没有意义,所以去掉无妨。如图:

clipboard.png

这里写法是(^|),看起来可能有些诡异,给你换一个写法也许你就明白了:

/(^)?rsv_bp=([^&]*)($)?/

当然这个写法其实是有问题的,如果在字符串中还存在一个1rsv_bp=233,如果这个串在rsv_bp=0的前边,那么匹配其实是错误的,所以更完善的写法应该是:

/(?<=(^|&))rsv_bp=([^&]*?)(?=(&|$))/

(^|) 这个理解是错误的

/(^|)aaa/.test('sfdsfaaa')
true
/(^|||||)aaa/.test('sfdsfaaa')
true

这个 意思是 开头 或者 什么都不匹配 | 和这个 ||||| 意思相同
你若是想要匹配空格是这样的

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