2

私はWordPressサイトを持っており、ページのリロードではなくAJAXを使用してアーカイブを更新しています(非常に基本的な用語で)。

だから私は渡すことができます:

http://mysite.com/events/2012/10/17
http://mysite.com/events/2012/10
http://mysite.com/events/2012

これらのいずれかを取得する JS/jQuery 正規表現メソッドを探しています。これまでのところ、次のものがあります。

var linkUrl = 'http://mysite.com/events/2012/10';
var linkDate = linkUrl.match(/\d{4}(\/\d{2})+/);
console.log( linkDate ); // output - ["2012/10", "/10", index: 8, input: "/events/2012/10"] 

2 つの一致が見つかったようですが、2 つ目は私が望んでいるものではありません。私の正規表現では単純なことだと確信しています。

4

3 に答える 3

2

私はこの正規表現を試します/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/:

'http://mysite.com/events/2012'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012", "2012", undefined, undefined]

'http://mysite.com/events/2012/03'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012/03", "2012", "03", undefined]

'http://mysite.com/events/2012/03/21'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012/03/21", "2012", "03", "21"]
于 2013-06-26T13:33:24.223 に答える
0

それで、私は素敵な O'Reilly 正規表現の本で解決策を発見しました。

正規表現をもう一度見てみると、月 [日] 式が括弧で囲まれていることに気付きました。これは、サブパターンをキャプチャすることを意味しているようです。解決策はこれでした。

var linkUrl = "/events/2012/10/25";
var linkDate = linkUrl.match(/\d{4}(?:\/\d{2})*/);
// output - ["2012/10/25", index: 8, input: "/events/2012/10/25"] 

部分文字列をキャプチャしない?:ように指示する括弧内に追加しました。これで、URL に応じてmatch受信2012/10/17または尊重されます。2012/10

また、サブパターンが適切に除外されているため、単一の値が返されていることにも注意してください。

于 2013-06-26T13:30:13.080 に答える