所以我有这样的网址:
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&
但我希望它停在井号。在[^&]
捕获组中添加磅似乎不起作用。有什么想法吗?
答案 0 :(得分:1)
使用lookahead:
urlVar=[^#]+(?=#|$)
这意味着匹配urlVar=
,后跟多个不是#
的字符,当您到达#
字符或字符串结尾时结束匹配。
因此,您只能在没有urlVar=
的情况下提取 true 部分:
(?<=urlVar=)[^#]+(?=#|$)
答案 1 :(得分:1)
[^?&]+\?urlVar=([^&#]+)(?:&|#)?.*
[^?&]+\?
- 应阅读任何非?
或&
至?
的字符。
([^&#]+)
- 应该捕获价值。
(?:&|#)?.*
- 应该读取&
或#
,如果存在(但不捕获),以及之后的任何字符。
但我宁愿用字符类替换第二组:[^?&]+\?urlVar=([^&#]+)[&#]?.*
答案 2 :(得分:0)
这与你的正则表达式不匹配:
[!?&]urlVar=([^&#]+)(&|$)
^^^^^
&
&#34;也不是字符串的结尾。只需删除该构造即可:
[!?&]urlVar=([^&#]+)