正则表达式保持/匹配任何以某个字符开头的单词

I'd like to keep only the string that starts with # or @

  1. foobar @sushi - wasabi
  2. foobar #sushi - horseradish

Therefore match on only @susui or remove text around it. PHP or JavaScript.

Depending on how you define a "word", you probably want

(?<=\s|^)[@#]\S+

or

(?<=\s|^)[@#]\w+

Explanation:

(?<=\s|^)  # Assert that the previous character is a space (or start of string)
[@#]       # Match @ or #
\S+        # Match one or more non-space characters
(or \w+)   # Match one or more alphanumeric characters.

So, in PHP:

preg_match_all('/(?<=\s|^)[@#]\S+/', $subject, $result, PREG_PATTERN_ORDER);

gives you an array $result of all the matches in the string $subject. In JavaScript, this won't work because lookbehinds (the "Assert..." part from the start of the regex) are not supported.