2016-10-20 4 views
1

私はこれらの入力文字列すべてにexampleを返すJS正規表現を作成しようとしていますが、疑問符が付いている可能性があります。 example 接尾辞付きのJS正規表現との一致方法

exampleexample?

  • example?after
  • example?after?after
    • 動的文字列が私は文字通り文字列 '例' と一致することができないであろう。

      'example?after?after'.match(/(.*?)\?/)[1] 
      'example?after'.match(/(.*?)\?/)[1] 
      'example?'.match(/(.*?)\?/)[1] 
      'example'.match(/(.*?)\?/)[1] 
      

      上記の最初の3つは、期待どおりにexampleを返しますが、最後にエラーが発生します。予期した結果を返すように正規表現を変更するにはどうすればよいですか?

    +1

    だから、何のクエスチョンマークがない場合は、疑問符の前に、すべてを返すようにしたいが、ん、文字列全体を返しますか? – vlaz

    答えて

    3

    あなたが

    /^[^?]+/ 
    

    regex demo

    ^は、文字列の先頭と一致して[^?]+?以外の1つの以上のシンボルに一致参照してください使用することができます。

    var regex = /^[^?]+/; 
     
    var strs =[ 'example?after?after', 'example?after', 'example?', 'example']; 
     
    for (var s of strs) 
     
    { 
     
        console.log(s + " => " + s.match(regex)); 
     
    }

    +0

    FYI、 '[^?]'は、*ネゲートされた文字クラス*の例です。ここでは、[** negated character classes **](http://www.regular-expressions.info/charclass.html#negated)の情報を参照してください。 –

    +0

    まあ、正規表現ではないアプローチは['s.substring(0、(m = s.indexOf( '?'))> -1?m:s.length)'](https://jsfiddle.net/juas2u3r /)。 –

    +0

    最初の '^'をスキップする際に問題はありますか?これらの例では、結果は同じではありません。 – user779159

    関連する問題