私は現在の正規表現を持っています:
/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)/g
文字列に対してテストしています:
Here's a #hashtag and here is #not_a_tag; which should be different. Also testing: Mid#hash. #123 #!@£ and <p>#hash</p>
私の目的では、この文字列で検出されるハッシュタグは2つだけです。 しない;
で終わるハッシュタグに一致するように式を変更する方法を考えています。この例では、これは#not_a_tag;
です。
乾杯。
以下についてはどうですか:
\B(\#[a-zA-Z]+\b)(?!;)
否定先読みreegexを使用できます。
/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)\b(?!;)/
\b
-単語の境界により、単語の終わりにいることが保証されます(?!;)
-次の位置にセミコロンがないと断言しますAnubhavaの回答に似ていますが、\w*
と\d*
の違いは\w
文字だけなので、[A-Za-z_]
の2つのインスタンスを0-9
に置き換えます。
これにより、ステップ数が588から90に削減されます。
(?<=[\s>])#(\d*[A-Za-z_]+\d*)\b(?!;)
/(#(?:[^\x00-\x7F]|\w)+)/g
#で始まり、次に少なくとも1つの(+)ANCIIシンボル([^\x00-\x7F]、非ANCIIシンボルを除く範囲)またはWordシンボル(\ w)。
これは、「#їжак」のようなANCII記号を含むケースをカバーする必要があります。
これがベストプラクティスです。
(#+[a-zA-Z0-9(_)]{1,})