我的正则表达式知识正在逃避这一点......
假设我有一个带有URI作为查询参数的URL,ala:
http://hostname.com?uri=http://website.com/company/YoYo+&+Co+Inc&type=company
Run Code Online (Sandbox Code Playgroud)
...假设我们的uri param本身不包含任何params,我想在Javascript中手动解析查询参数,但很明显我们的嵌入式uri param中的&符号使得更难以分解所有的&符号并运行它从那里.
我真正想要做的是定义一个只匹配问号和符号的正则表达式,在跟随另一个&符号(或行尾)之前跟随等号.我提出了这个很接近,但也包括非捕获文本,我不知道为什么:
[?&](?:[^&]+)=
Run Code Online (Sandbox Code Playgroud)
...导致匹配?uri=以及&type=接近但是捕获超出我想要的匹配.我在做什么错了,使得它不只是捕获的?,并&在比赛吗?换句话说,它应该只捕获?uri &之前和之前的类型.
如果我理解正确而你只是想匹配?或者然后你的正则表达式应该是:
[?&](?==)
Run Code Online (Sandbox Code Playgroud)
说明:
[?&]是一组包含的字符?和&.意思是它将寻找其中之一.
(?= )这是一个积极的前瞻.这意味着"这必须在主要比赛之后但不包括它".所以要让它找到一个看起来很有趣的东西(?==)
如果要包含单词"uri"或"type" \w,请在字符集之后和前瞻之前添加一个:
[?&]\w+(?==)
Run Code Online (Sandbox Code Playgroud)
+ 表示"匹配1或更多"
还有一个,如果不是你正在寻找的那个!如果你想摆脱&/?但保留文本,我们将字符集包装在正面lookBEHIND中.语法是(?<= ).这会将正则表达式改为:
(?<=[?&])\w+(?==)
Run Code Online (Sandbox Code Playgroud)
工作示例:http://regexr.com?35q0u
在回应评论:你可以匹配吗?并且通过将\ w +置于正向前方:
[?&](?=\w+=)
Run Code Online (Sandbox Code Playgroud)
而且因为我很无聊并且有点像regexs,所以这里有一个与标签的值相匹配的:
(?<==).*?(?=[&?]\w+=|$)
Run Code Online (Sandbox Code Playgroud)
示例:http://regexr.com? 35q11由于全局匹配已启用,因此有多个突出显示的部分.
| 归档时间: |
|
| 查看次数: |
11077 次 |
| 最近记录: |