正则表达式:在没有最后一个匹配组的情况下从字符匹配到行尾

时间:2014-12-28 07:59:42

标签: javascript regex uri

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

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

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

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

否则,当它到达行尾时:

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

这有效,但看起来并不合适。

有没有办法不包括最后一个匹配组,因为我对它不感兴趣?

1 个答案:

答案 0 :(得分:2)

将最后一组变为正向前瞻断言。

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

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

DEMO

> ".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