2016-05-20 7 views
0

このパターンを見つけることに基づいて、最小および最大の単語数に一致するjavascript正規表現を作成しようとしています。任意の数の文字の後にスペースを続けます。私は範囲数量詞{1,3}に追加するとJavaScriptの正規表現量限定子

(^[a-zA-Z]+\s$) 

Debuggex Demo

、それの2つの存在と一致しない:これは、(一例)空のスペースに続いて一つの単語に一致しますパターン(例えば、1つ2つ)。このパターンの最小値と最大値を一致させるには、正規表現に変更する必要がありますか?

(^[a-zA-Z]+\s$){1,3} 

Debuggex Demo

任意の説明を大幅に理解されます。あなたは1行の文字列を複数回の開始と終了を一致させることができないため

答えて

1

は、^および定量化グループのうち$ます。

^([a-zA-Z]+\s){1,3}$ 

DEMO

1

(^[a-zA-Z]+\s$)は、単語[a-zA-Z]+をスキャン、ライン^の先頭からスキャンを開始スペース\sをスキャンし、行の終わりを期待します$

あなたを2つの単語を持っている、それは行の終わりを見つけることができないので、それは失敗します。 $を取り出すと、2行目は行の先頭ではないので失敗します。

開始線と終了線は制限スキャンを回避する必要があります。

それはより一般的にするには:

(\S+\s*){1,3} 

\S+:少なくとも一つの非空白

\s*:空白

の任意の量は、これはありませんがあっても言葉のスキャンが可能になります文字列の最後のスペース。あなたが行全体を強制したい場合は、最後にフロントと$^を置くことができます。

^(\S+\s*){1,3}$ 
1

以下は、正確に指定されているように動作します:

^([a-zA-Z]+){1,3}$ 

\sとスペースを交換してください

^([a-zA-Z]+\s){1,3}$ 

がに数量詞を追加します。任意の単一の空白文字にマッチします3210で空白文字の数を設定できます。以下は+を追加することによって、一つ以上のことができます:最後の空白はオプションです

^([a-zA-Z]+\s+){1,3}$ 

場合は、次のように動作します:

^([a-zA-Z]+(\s[a-zA-Z]+){0,2})\s*$ 
+0

あなたが書いた最後のバージョンと@で述べた一般的な概念をGerhardPowellは、あなたが入力している間にカーソルが単語間で一致しているという点で、私が探していたことの振る舞いを与えました。あなたが提案した最後の\ s * $がなければ、それも機能しません(トータルラインマッチのオンとオフを切り替える)。最終的な例は次のとおりです。https://www.debuggex.com/r/Fwg1214xeBqhYvzL – Mark1010

+0

私はこのリンクが私の前のコメントにあることを意味しました:https://www.debuggex.com/r/ZmR6T38d8SOM_PlH – Mark1010