我正在尝试获得一个可选的前瞻但是我遇到问题时,只要我将其设置为可选(在它之后添加?
),即使数据存在,它也不再匹配。
作为一个简短的总结,我试图从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
。有什么想法吗?
答案 0 :(得分:4)
尝试将问号放入预测:
...((?=(?:.*foo=([^\&]+))?)...
看起来很奇怪,但我认为好看的正则表达不是目的: - )
另外,你有没有想过这个?
/.*foo.html\??.*(?:foo|bar)=([^\&]+).*(?:bar|foo)=([^\&]+)/