この正規表現を試すことができますか:
/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i
更新 1:
#blah23blah や #23blah23 のように、上記の正規表現が一致しない場合がいくつかあります。したがって、すべてのケースを処理するように正規表現を変更しました。
正規表現:
/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i
壊す:
(?:\s|^)
-- 前のスペースまたは行頭に一致します。試合をキャプチャしません。
#
-- ハッシュに一致しますが、キャプチャしません。
(?!\d+(?:\s|$)))
-- # とスペース (または行末) の間のすべての数字を避けるための否定先読み
(\w+)
-- すべての単語文字に一致してキャプチャします
(?=\s|$)
-- 次のスペースまたは行末を確実にするための正の先読み。これは、隣接する有効なハッシュ タグと一致するようにするために必要です。
ほとんどのケースをキャプチャするために変更されたサンプル テキスト:
#何とか #箱に #5 ダース #good2 #3good 酒を詰めてください。
一致:
マッチ 1:何とか
マッチ 2: ボックス
マッチ 3: good2
マッチ 4: 3good
マッチ 5: mkvef214asdwq
マッチ 6: 3e4
マッチ 7: 2good
ルーブルリンク
更新 2:
アンダースコアで始まる単語またはアンダースコアで終わる単語を除外するには、次のように除外を否定先読みに含めます。
/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i
サンプル、正規表現、および一致は、このRubular リンクに記録されています