Here you go:
(?=^.{3,50}$)(\s*\p{L}+\s*){1,2}
Or if you don't want any leading whitespace, trailing whitespace, or more than one space between the words:
(?=^.{3,50}$)\p{L}+(\s\p{L}+)?
EDIT:
As this other SO post shows, Javascript has a problem with Unicode character classes. So, \p{L}
won't work in Javascript.
What does that mean for you? Well, that other post shows three different solutions. Which solution is right for you depends on whether or not you know in advance exactly which accented characters or non-word (e.g. punctuation) characters might entered.
One possible approach is to list out the valid accented characters then concatenate it in to the regex:
var validWordCharacters = "[" + "a-z" + "A-Z" + "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇߨøÅ寿œ" + "]";
var regex = "(?=^.{3,50}$)" + validWordCharacters + "+(\s" + validWordCharacters + "+)?";
regexCompiled = new RegExp(regex);
Another possible (and more concise) solution is to use a range of code points:
var validWordCharacters = "[" + "a-z" + "A-Z" + "\u00C0-\u024F" + "]";
var regex = "(?=^.{3,50}$)" + validWordCharacters + "+(\s" + validWordCharacters + "+)?";
regexCompiled = new RegExp(regex);