更新的问题
假设字符串Perl
,在这种情况下我需要捕获:
我使用(?<=)
,see here。
但是Javascript不支持lookbehind,那么表达式(?:[?&])((foo\=[^&#]*)|(foo(?=[&#]))|(foo(?!.)))
(正向后观)并不被识别。
我也尝试match
(非捕获组语法),但是返回执行方法F
:
答案 0 :(得分:1)
从示例"foo?foo=bar&foo&foofoo"
和"foo?foo=bar&foo&foo"
你可以试试正则表达式(foo\=[^\&]*)|(foo(?=\&))|[^\w]foo(?!.)
这将匹配第一个字符串中的foo=bar
和foo
。
并且会在第二个字符串中匹配foo=bar
,foo
和&foo
。
编辑:
使用非捕获组来弥补缺乏负面反馈,您可以使用此正则表达式过滤掉最后一个&
:(foo\=[^\&]*)|(foo(?=\&))|(?:\&(foo(?!.)))
导致"foo?foo=bar&foo&foo"
上匹配的捕获组:
1)foo=bar
2)foo
3)foo
答案 1 :(得分:1)
我不完全确定你的结果应该是什么......但也许这个可以解决你的问题:
(?!foo\?)(foo(\=[^\?^&]+)?)+
这将匹配:
答案 2 :(得分:1)
我不认为正则表达式是适合此的工具。
相反,首先使用.split("?")
来分隔路径和查询。然后接受查询并.split("&")
。现在你拥有了你想要的所有作品。
您可以遍历它们以找到您需要的特定内容,或者更进一步,.split("=")
它们可以分隔键/值对。
比正则表达式更容易。
答案 3 :(得分:0)
解决方案在我们面前。对不起,我迟到了。
最后的正则表达式是:
\b(foo\b\=[^&#]*)
特殊字符\b
设置匹配的边界字,然后,例如,它不匹配&#34; nonfoo = bar&#34;,但匹配&#34; foo&#34 ;,&#34; foo = bar&#34;并且在&#34; foo&#34;之前不包含任何内容。 (作为正面的后视),但是如果单词在URI哈希之后它也匹配(现在没有办法解决这个问题)。