2015-09-29 8 views
6

私はエントリを特定の形式に制限しようとしています。Javascript条件付き正規表現if-then-else

エントリは、01 \ 01-5500-000-00として5500または5100を持っている場合、私はこれが欲しい:

^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$ 

をしかし、エントリが5500または5100以外のものを持っている場合、私がしたいですこれを持っている:

^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$ 

これはif then elseアイデアでどのように達成できますか?

+4

あなたはどの言語を使用していますか?何を試しましたか? – Sam

+0

^[0-9] {2} \\ [0-9] {2} -5 [15] 00- [0-9] {3} - $ |^[0-9] {2、} \\ [0-9] {2} - (?5 [15] 00)[0-9] {4} - [0-9] {3} - [0-9] {2} $ ' –

+0

I表現を正しく作成するためにhttp://www.webtoolkitonline.com/regular-expression-tester.htmlを使用しました。そして、私は括弧で5500のパイプを次のように使ってみました:(?=。* 5500)|^[0-9] {2、} \\ [0-9] {2} \ - [0-9] {0} {3} \ - [0-9] {2} $ - 正しくありません。 – user974061

答えて

7

条件付き正規表現構文はJavaScriptの正規表現エンジンでサポートされていないが、それは2つの選択肢非含有取り込みグループで回避することができます。

  1. 正のルックアヘッドを持つものと

  2. 逆のネガティブ先読みで2番目のものがあります。

この正規表現は、あなたの基準を満たしているとJavaScript互換性があります。

  • ^ - 文字列のスタート
  • ^(?:(?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-|(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2})$ 
    

    は私がそれを打破してみましょうregex demo

    を参照してください。 (?:

    • (?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\- - 交代演算子
    • (?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}) - - 第二の別の文字列内の単語全体5500または5100を必要(?=.*\b5[15]00\b)先読みし、第1のパターンとの最初の選択肢あなたは
    • |を持っています文字列内に5100または5500が存在しないことを確認してから、2番目のパターンにのみ一致するように、負のルックアヘッドである(?!.*\b5[15]00\b)が付加されています。
  • $ - 文字列の最後。
1

使用条件文、例:

((=正規表現)を|他?)[0-9]{2,}\\[0-9]{2}\-(?(?=5[15]00)[0-9]{4}\-[0-9]{3}\-|[0-9]{4}\-[0-9]{3}\-[0-9]{2})

正規表現の条件文の例:[email protected]あなたが使用している場合は

PCREベースではない正規表現エンジンでは、次のように機能を模倣することができます。

((?=positive-regex-statement)then|(?!negavite-regex-statement)then) 

例:

^[0-9]{2,}\\[0-9]{2}\-((?=5[15]00)[0-9]{4}\-[0-9]{3}\-|[0-9]{4}\-|(?!5[15]00)[0-9]{4}\-[0-9]{3}\-[0-9]{2})$ 

ミミック正規表現条件文の例:[email protected]

+1

これは私に構文エラー – user974061

+2

@ user974061を与えます:あなたはこの正規表現で使用しているプログラミング言語は何ですか? (条件はPCREのようなエンジンでのみサポートされています)。 – Eder

+0

@Houseman:あなたは実際に投稿全体を読んだのですか、何の理由もありませんでしたか?私は非PCREベースのエンジン(Javascriptも含む)に答えました。 – Eder

2

5500分の5100のリテラル値を使用して、パターン[0-9]{4}のこの部分を置き換えます。

/^\d{2,}\\\d{2}-(?:5[15]00-\d{3}-|(?!5[15]00)\d{4}-\d{3}-\d{2})$/ 
  • [0-9]は他の部分については、JavaScriptで\d
  • と同じものである、使用negative lookahead(?!5[15]00)\d{4} 5100/5500でないことを保証する。