我正在尝试获得一个可选的前瞻但是我遇到问题,只要我将其设为可选(?在它之后添加一个),即使数据存在也不再匹配.
作为一个简短的总结,我试图从URI中提取特定的查询字符串参数.例:
/.*foo.html\??(?=.*foo=([^\&]+))(?=.*bar=([^\&]+))/
    .exec( 'foo.html?foo=true&bar=baz' )
我会稍微突破一点:
.*foo.html\??      // filename == `foo.html` + '?'
(?=.*foo=([^\&]+)) // find "foo=...." parameter, store the value
(?=.*bar=([^\&]+)) // find "bar=...." parameter, store the value
以上示例在条件下完美地工作,foo并且bar在查询字符串中作为参数存在.问题是我正在尝试使这些可选,所以我将其更改为:
/.*foo.html\??(?=.*foo=([^\&]+))?(?=.*bar=([^\&]+))?/
                                ?                  ?
    Added these question marks ?????????????????????
并且它不再匹配任何参数,尽管它仍然匹配foo.html.有任何想法吗?
尝试将问号放入前瞻中:
...((?=(?:.*foo=([^\&]+))?)...
看起来很奇怪,但我认为漂亮的正则表达式不是目的:-)
另外,你有没有想过这个问题?
/.*foo.html\??.*(?:foo|bar)=([^\&]+).*(?:bar|foo)=([^\&]+)/