我正在使用正则表达式,并在javascript中有一些行。我的表达应该提供两个匹配,但只识别一个,我不知道这是什么问题。
javascript中的行看起来像这样:
if(mode==1) var adresse = "?APPNAME=CampusNet&PRGNAME=ACTION&ARGUMENTS=-A7uh6sBXerQwOCd8VxEMp6x0STE.YaNZDsBnBOto8YWsmwbh7FmWgYGPUHysiL9u0.jUsPVdYQAlvwCsiktBzUaCohVBnkyistIjCR77awL5xoM3WTHYox0AQs65SoHAhMXDJVr7="; else var adresse = "?APPNAME=CampusNet&PRGNAME=ACTION&ARGUMENTS=-AHMqmg-jXIDdylCjFLuixe..udPC2hjn6Kiioq7O41HsnnaP6ylFkQLhaUkaWKINEj4l2JqL2eBSzOpmG.b5Av2AvvUxEinUhMBTt5awdgAL4SkBEgYXGejTGUxcgPE-MfiQjefc=";
我的表情如下:
(?<Popup>(popUp\(')|(adresse...")).*\?((?<Parameters>APPNAME=CampusNet[^>"']*["']))
我希望与APPNAME有两个匹配......作为参数。
[更新]就像Tim Pietzcker所写,我使用了贪婪的版本,应该使用懒惰的版本。虽然他写道我用自己解决了它。?而不是。在中间,所以表达式如下所示:
(?<Popup>(popUp\(')|(adresse...")).*?\\?((?<Parameters>APPNAME=CampusNet[^>"']*["']))
那很有用。感谢Tim Pietzcker
答案 0 :(得分:1)
通常,您必须使用带有“global”标志的正则表达式来查找所有匹配项。在我看到你正在使用的完整代码示例之前,我真的不能说更多。
答案 1 :(得分:1)
你的正则表达式匹配太多 - 从第一个adresse
到最后一个"
,因为它使用了贪婪的量词.*
。
如果你让量词懒惰,我。即
(?<Popup>(popUp\(')|(adresse...")).*?\?((?<Parameters>APPNAME=CampusNet[^>"']*["']))
你得到两场比赛。
或者,如果您的数据允许,请使用仅匹配非空格字符的其他量词。这将更快地匹配(但是如果你想要匹配的文本可能包含空格,那么当然会失败):
(?<Popup>(popUp\(')|(adresse..."))\S*\?((?<Parameters>APPNAME=CampusNet[^>"']*["']))