我一直在使用以下正则表达式来检查它是否是有效的Facebook网址:/^(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-]*)?$/

问题是,此正则表达式很旧,现在某些url网址中有一个.?fref=ufi网址示例:https://www.facebook.com/user.moreusername?fref=ufi我该如何修复,以便该正则表达式接受这种网址?

我一直在尝试添加\/?(?:?fref=ufi.)?\/,但没有任何运气。

最佳答案

仅从您提供的内容来看,我发现它可以正常工作:

^(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[?\w\-]*\/)?(?:profile.php\?id=(?=\d.*))?([\w\-\.]*)?(?:\?fref=ufi)?$


区别在于:

([\w\-\.]*)? // added the \. for matching the . literally
(?:\?fref=ufi)?$ // this was appended to the end


Regex101

这可能不适用于所有情况,因为我只能处理您的测试用例。

07-25 21:51