正则表达式:从字符到行尾匹配,没有最后一个匹配组

Regex: Match from character to end of line without the last match group

本文关键字:最后一个 字符 正则表达式      更新时间:2023-09-26

我想从一些网址中提取q参数:

.com/?gws_rd=ssl#q=test
.com/search?q=something+else&source=123

这是我想出的一个正则表达式:q=(.*?)(&|$).当&终止时,结果为:

["q=test", "test", "&"]

否则,当它到达行尾时:

["q=test", "test", ""]

这有效,但似乎不对。

有没有办法完全不包括最后一个比赛组,因为我对它不感兴趣?

将最后一组变成积极的前瞻性断言。

(?=&|$)断言匹配后必须跟有&或行尾锚点$

q=(.*?)(?=&|$)

演示

> ".com/?gws_rd=ssl#q=test".match(/q=(.*?)(?=&|$)/)
[ 'q=test',
  'test',
  index: 17,
  input: '.com/?gws_rd=ssl#q=test' ]

仅打印捕获组中的字符。

> var s = ".com/?gws_rd=ssl#q=test"
undefined
> console.log(/q=(.*?)(?=&|$)/.exec(s)[1]);
test