2016-07-21 9 views
3

(セミコロン)私は現在の正規表現があります:私は、文字列に対してテストしてい#hashtagに一致する正規表現ですが、#hashtagには一致しません。

/(?<=[\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 #[email protected]£ and <p>#hash</p> 

をのみ、この文字列で検出された2つのハッシュタグがあるはずです。私はそれは私の例では;で終わらないマッチハッシュタグを行うように表現を変更する方法を思ったんだけど、この#not_a_tag;

乾杯です。

答えて

5

方法について、次の

Regex Demo

  • \B(\#[a-zA-Z]+\b)(?!;) 
    
    \ B - >未単語境界
  • (#[a-zA-Z]の+ \ B) - >キャプチャグループが始まります#末尾に単語境界を持つ任意の数のazまたはAZが続きます。
  • (?!;) - >は続きません。
+4

' \ B'を意味しましたか? '\ W'は'# 'の前に存在する実際の文字を必要とします。 –

+0

最小限の手順で回答を受け入れてください。 \ Bはおそらく私が使っているものです。 – Wex

+0

@TimPietzckerあなたはそうです。投稿が編集されました。 – tk78

4

あなたは、負の先読みreegex使用することができます。

/(?<=[\s>]|^)#(\w*[A-Za-z_]+\w*)\b(?!;)/ 
  • \bを - ワード境界は、私たちが言葉
  • (?!;)の終わりであることを保証します - 私たちは、次のセミコロンを持っていないと主張します位置

RegEx Demo

+0

パフォーマンス '\ B#(\ d * [A-Za-z _] + \ w *)\ b(?!;)'はあなたの正規表現でなければなりません。 '#[a-zA-Z] +'は '#123hashtag'と一致しません – anubhava

1
anubhavaの回答に似

しかし\w[A-Za-z_]間の唯一の違いはあるとして\d*\w*の2つのインスタンスを交換0-9文字

これは588から90

に工程数を減少させる効果を有します

(?<=[\s>])#(\d*[A-Za-z_]+\d*)\b(?!;)

Regex101 demo

関連する問題