「@」でマークされた文字列から (潜在的にハイフンでつながれた) 単語を抽出しようとしています。
たとえば、文字列から
var s = '@moo, @baa and @moo-baa are writing an email to a@bc.de'
戻りたい
['@moo', '@baa', '@moo-baa']
メールアドレスを取得しないようにするために、グループの前に空白文字または行頭があることを確認します。
s.match(/(^|\s)@(\w+[-\w+]*)/g)
これでうまくいくようですが、スペースもキャプチャされますが、これは望ましくありません。
["@moo", " @baa", " @moo-baa"]
このようにグループ化を沈黙させる
s.match(/(?:^|\s)@(\w+[-\w+]*)/g)
動作していないようで、以前と同じ結果を返します。反対のことも試してみて、グループの前に \w または \S がないことを確認しましたが、行頭も除外されています。単純にスペースを削除できることはわかっていますが、1 回の「一致」呼び出しだけでこれを機能させたいと思っています。
誰かが私が間違っていることを提案していますか? よろしくお願いします!
[編集]
また、気付きました:「@」記号も返すのはなぜですか?! つまり、それは私が望んでいることですが、なぜそれをしているのですか? 彼らはグループ外ですよね?