2016-08-17 17 views
3
私は正規表現で、以下の文章を解析しようとしている

(ジャバスクリプト)で複数の作業を許可する:私は私が火を必要とする 正規表現は、文

  • いくつかのチョコレートを欲しい
  • テレビを望む

    現在私は試みています:I(\b[a-zA-Z]*\b){0,5}(TV|chocolate|fire)しかし、それは動作しません。私は\wでいくつかのテストを行いましたが、運はありません。

    "私"と最後の単語の間に任意の単語(最大5語)を許可したいと魔法使いは事前に定義されています。

  • 答えて

    4

    である、あなたは

    /I(?:\W+\w+){0,5}\‌​W+(?:TV|chocolate|fir‌​e)/ 
    

    regex demo

    参照を使用することができますポイントは単語の境界を追加したが、 "単語"の間のスペース、句読点など(他のすべての単語以外の文字)は考慮していないということです。左区切り

  • (?:\W+\w+){0,5}\‌​W+と一致する - -

    • I(起因limiting quantifier {n,m}に)0〜5の配列と一致1+非単語の文字(\W+)との1+:

      パターンは詳細を(\w+)、末尾の\W+は、1つ以上の非単語文字と一致します。これは、最後に一致した単語の文字列と最後に一致する単語文字を区切るために存在しなければなりません。

    • (?:TV|chocolate|fir‌​e) - あなたは、スペースについて使用を気にしない場合は
  • +0

    (*や*は、 '\ s'を使用して常に*スペース*より優先されます) –

    +0

    時々、リテラルスペースが意味されます。ところで、ここに似たような正規表現があります:['/I(?:\W+\w+){0,5}\W+(?:TV|chocolate|fire)/'](https://regex101.com/r/) iE5nA7/1)を使用して、charチャンクの間に単語以外の文字があることを確認します。 –

    +1

    \ W + \ w +のバージョンが私の探しているものです!ありがとう! :) – jaumard

    0

    Iの後ろに空白を追加する必要があります。そうしないと、文全体がキャプチャされません。正規表現式をテストするための

    I(\b[a-zA-Z ]*\b){0,5}(TV|chocolate|fire) 
    

    I greateのサイトがイン間の単語以外の単語の文字を説明するためにregexr

    +0

    [これは、私がしたいと思ういくつかのチョコレートです](https:// regex101。 –

    +0

    この式では、I([] * \ b [a-zA-Z] * \ b){0,5}(TV |チョコレート|火) ' –

    0

    区切り末尾に一致します。

    /I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/

    +0

    これは、単語が句読点で区切られている場合を考慮しないため、 '\ S' /' \ s'を使用することをお勧めします。 –

    0

    /I\s+(?:\w+\s+){0,5}(TV|chocolate|fire)/ 
    

    Test here)に基づいて

    をお試しくださいStefan Kertのバージョンですが、woの代わりにそれぞれの余分な単語の右側のスペースに頼っていますrd境界。

    有効な任意の長さの単語(\ w)と有効なスペーシング文字(繰り返しを考慮しない)も使用できます。