First, I'm assuming you don't want the terminal periods to be matched. You want to match:
St.John's high school
not:
St.John's high school.
I want to be cautious in answering this because the specification is just a series of examples. It's very possible that I do not actually understand the pattern you are trying to match. That said, I don't see a way to materially improve the performance of your regex. I can say with certainty that a poorly defined regex can adversely affect the performance of a program. Sadly, I do not know of a way to validate the efficiency of a regex.
The only vaguely useful suggestion I can offer is to use [a-z] in a case insensitive match instead of [a-zA-Z]. That makes it slightly easier to read, but has no affect on how the regex would perform.