如何实施积极的" lookbehind" Javascript中的正则表达式

时间:2016-05-14 09:41:52

标签: javascript regex lookbehind

更新的问题

假设字符串Perl,在这种情况下我需要捕获:

  • 富=酒吧
  • 富= FOO

我使用(?<=)see here

但是Javascript不支持lookbehind,那么表达式(?:[?&])((foo\=[^&#]*)|(foo(?=[&#]))|(foo(?!.)))(正向后观)并不被识别。

我也尝试match(非捕获组语法),但是返回执行方法F

  • ?富=酒吧
  • &安培;富= FOO

4 个答案:

答案 0 :(得分:1)

从示例"foo?foo=bar&foo&foofoo""foo?foo=bar&foo&foo"

判断

你可以试试正则表达式(foo\=[^\&]*)|(foo(?=\&))|[^\w]foo(?!.)

这将匹配第一个字符串中的foo=barfoo。 并且会在第二个字符串中匹配foo=barfoo&foo

编辑:

使用非捕获组来弥补缺乏负面反馈,您可以使用此正则表达式过滤掉最后一个&(foo\=[^\&]*)|(foo(?=\&))|(?:\&(foo(?!.)))

RegexDemo

导致"foo?foo=bar&foo&foo"上匹配的捕获组:

1)foo=bar

2)foo

3)foo

答案 1 :(得分:1)

我不完全确定你的结果应该是什么......但也许这个可以解决你的问题:

(?!foo\?)(foo(\=[^\?^&]+)?)+

这将匹配:

  • 富=酒吧
  • FOO
  • foo foofoo

答案 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哈希之后它也匹配(现在没有办法解决这个问题)。