Although I'm not on Facebook anymore, I have the same problem with LinkedIn. To deal with it, I just add to my email sieve filter every so often. So far I have:

  ## Linkedin - Trash useless email
  if allof(
    address :is "From" "[email protected]",
    anyof(
      header :regex "Subject" "^(Congratulate|Say happy birthday to) .+",
      header :regex "Subject" "^Check out .+ (updated profile|new skill|new photo)",
      header :regex "Subject" ".+ is a?waiting (for )?your response$",
      header :regex "Subject" "^News about .+",
      header :regex "Subject" "ou have [0-9]+ (unread message|new update)",
      header :regex "Subject" "Do you know .+",
      header :regex "Subject" "^.+, you have .+waiting for you on LinkedIn$",
      header :regex "Subject" "see who you already know on LinkedIn$",
      header :regex "Subject" "^.+, more than [0-9,]+ new jobs in .+$",
      header :regex "Subject" "^Connect to your classmates from .+$"
    )
  ){
      addflag  "\\Seen";
      fileinto "Trash";
      stop;
  }
I'm sure you could do something similar for Facebook if you just switched to email notifications and stopped using the mobile apps.

Slight tangent, but any suggestions on how to do this kind of real-time filtering with Gmail? The filter functionality doesn't quite let you do regexes.

Imapfilter [1] would work.

It also uses regexes so it would be easy to convert mike-cardwell's rules.

[1]: https://github.com/lefcha/imapfilter