0

次のコードがあります。

var splitter = (filterValue.length > 0 ? filterValue.match(/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*\-?\s*(\d\d\/\d\d\/\d{4})?\s*$/).slice(1) : '');

どこfilterValueにある可能性があります:

01/01/2013

> 01/01/2013

< 01/01/2013

01/01/2013 - 01/01/2013

そして、これらを次のようなチャンクに分割します。

    var string1 = (splitter.length > 0 ? splitter[0] : '');
    var string2 = (splitter.length >= 2 ? splitter[1] : '');
var string3 = (splitter.length >= 3 ? splitter[2] : '');
var string4 = (splitter.length < 4 ? splitter[3] : '');

string1'', '>', '<', ''上記の例ではどちらかになります。

string2いつも初デートだろう

string3''または'-'ダッシュが 2 つの日付の間に存在する場合

string4最後のデートになります。

ただし、最後のシナリオを機能させることはできません。したがって、これを処理するための正規表現に問題があると仮定します。誰でも問題を見ることができますか?

フィドル: http://jsfiddle.net/7LR49/1/

私は得ています:

undefined
01/01/2013
01/01/2013
undefined

私が得るべきとき:

undefined
01/01/2013
-
01/01/2013

スプリッターでコンソールを実行すると、次のように表示されます。

[undefined, "01/01/2013", "01/01/2013"]

したがって、最後の 3 番目のキーは、正規表現によって実際に取得されるわけではありません。そして、代わりに4番目を取得します。

4

2 に答える 2

2

いくつかの修正:

  • あなたの正規表現は、ダッシュを 3 番目のグループとしてキャプチャしていませんでした。だから私はそれを変更しました。

差出人:/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*\-?\s*(\d\d\/\d\d\/\d{4})?\s*$/
宛先...:/^\s*(<|>)?\s*(\d\d\/\d\d\/\d{4})\s*(\-)?\s*(\d\d\/\d\d\/\d{4})?\s*$/
変更:.................................^..^

  • そして、あなたの状態は評価されていなかったtrueので、最後のグループの値を無視します:

差出人:var string4 = (splitter.length < 4 ? splitter[3] : '');
宛先...:var string4 = (splitter.length < 5 ? splitter[3] : '');
変更:..............................^

今すぐ出力:

undefined
01/01/2013
-
01/01/2013 

更新されたフィドル: http://jsfiddle.net/7LR49/2/

于 2013-11-11T16:59:14.387 に答える
0

以下は私にとってはうまくいきます:

function getMatches(string, regex, index) {
    index || (index = 1); // default to the first capturing group
    var matches = [];
    var match;
    while (match = regex.exec(string)) {
        matches.push(match[index]);
    }
    return matches;
  }
  var str = "> 01/01/2013 - 02/01/2013";
  var regex = /\b(\d\d\/\d\d\/\d\d\d\d)\b/g;
  var matches = getMatches(str, regex, 1);
  alert(matches[0]);
  alert(matches[1]);

出力:

01/01/2013
02/01/2013

方法はこちらから

于 2013-11-11T16:44:49.043 に答える