Используйте регулярное выражение следующим образом:
var match = s1.match(/^([\S\s]*?)(?:foo|bar)([\S\s]*)$/);
/* If foo or bar is found:
match[1] contains the first part
match[2] contains the second part */
Объяснение RE:
[\S\s]*?
соответствует только достаточному количеству символов, чтобы соответствовать следующей части RE, которая равна
(foo|bar)
либо "foo", либо "bar"
[\S\s]*
соответствует оставшимся символам
Скобки вокруг части RE создают группу, чтобы можно было ссылаться на сгруппированное совпадение, тогда как (?:)
создает группу без ссылок.