RegExr将URL var与&匹配或#

时间:2015-09-11 12:40:51

标签: regex

所以我有这样的网址:

  

http://www.someurl.com/subdir/dir/name urlVar =真#someotherpath / TD /一个/方法/ P /数据/ 1612040菜单= MENU1&安培;?测试= mytest的&安培;测试= 2

我正在尝试编写一个regExr来获取urlVar,但我只是得到了这个:[!?&]urlVar=([^&#]+)(&|$)

如果我删除上面表达式中的#,我会得到:

urlVar=true#someotherpath/td/a/way/p/data/1612040?menu=menu1&

但我希望它停在井号。在[^&]捕获组中添加似乎不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

使用lookahead

urlVar=[^#]+(?=#|$)

这意味着匹配urlVar=,后跟多个不是#的字符,当您到达#字符或字符串结尾时结束匹配。

See it in action

<小时/> 如果你使用非JavaScript的正则表达式引擎,它也可能支持lookbehinds。

因此,您只能在没有urlVar=的情况下提取 true 部分:

(?<=urlVar=)[^#]+(?=#|$)

答案 1 :(得分:1)

[^?&]+\?urlVar=([^&#]+)(?:&|#)?.*

[^?&]+\? - 应阅读任何非?&?的字符。

([^&#]+) - 应该捕获价值。

(?:&|#)?.* - 应该读取&#,如果存在(但不捕获),以及之后的任何字符。

但我宁愿用字符类替换第二组:[^?&]+\?urlVar=([^&#]+)[&#]?.*

您可以对其进行验证herehere

答案 2 :(得分:0)

这与你的正则表达式不匹配:

[!?&]urlVar=([^&#]+)(&|$)
                    ^^^^^
  • 没有&#34; &&#34;也不是字符串的结尾。

只需删除该构造即可:

[!?&]urlVar=([^&#]+)