4

私は正規表現の第一人者ではないので、次のように機能する正規表現を作成するための支援を求めています。

var regExp = ???

regExp.exec('\/Date(1330848000000-0800)\/') = [..., '1330848000000', '0800']

// optional gmt
regExp.exec('\/Date(1330848000000)\/') = [..., '1330848000000', null]

regExp.exec('\/Date(1)\/') = [..., '1', null]

// gmt required if - is present
regExp.exec('\/Date(1330848000000-)\/') = null

// escaping backslash is required
regExp.exec('/Date(1330848000000-0800)\/') = null
regExp.exec('\/Date(1330848000000-0800)/') = null

// case sensitive
regExp.exec('\/date(1330848000000-0800)\/') = null

// only numbers allowed
regExp.exec('\/Date(1aaa848000000-0800)\/') = null
regExp.exec('\/Date(1330848000000-0a00)\/') = null

私はこれと同じくらい愚かな何かでかなり早く立ち往生しました:

/\\bla(.*)bla/.exec('\bla123bla') = null // instead of [ ..., '123']

new RegExp('\\\\bla(.*)bla').exec('\bla123bla') = null // instead of [ ..., '123']
4

3 に答える 3

5

文字列に時刻とタイムゾーン以外の数字が含まれていない場合は、この正規表現を使用できます。

/(\d+)(?:-(\d+))?/

あなたのコードに入れる:

var regex = /(\d+)(?:-(\d+))?/;
// regex.exec...

文字列から数値を検証 して抽出する必要がある場合は、次のようにします。

/^\/Date\((\d+)(?:-(\d+))?\)\/$/

上記の正規表現は、文字列が正確な形式に従っていることを確認し、数値も抽出します。

于 2013-01-30T05:06:31.443 に答える
1

次の正規表現は、必要な制約をチェックします。

\\/Date\((\d{13})(-(\d{4}))?\)\\/

\a の後に aが続き、その後に13 桁の括弧で囲ま/れたテキストと、オプションのシーケンス の後に 4 桁の数字が続き、その後に必須のとが続くことをチェックします。Date-\/

は、正規表現の特殊文字であるため、エスケープが必要\\な単一に一致します。と\の場合も同様です。()

これから、$1 は括弧内の 13 桁に一致し、$3 は存在する場合は 4 桁に一致します。

于 2013-01-30T04:54:33.450 に答える
0

私は正規表現で遊んで、ついにそれを手に入れました

エスケープスラッシュはjavascriptによって無視されているだけなので、これが私が思いついた解決策です(クロムコンソールでテスト済み)

var regExp
undefined

regExp = /^\/Date\((\d+)(?:-(\d+))?\)\/$/
/^\/Date\((\d+)(?:-(\d+))?\)\/$/

regExp.exec('\/Date(1330848000000-0800)\/')
["/Date(1330848000000-0800)/", "1330848000000", "0800"]

regExp.exec('\/Date(1330848000000)\/')
["/Date(1330848000000)/", "1330848000000", undefined]

regExp.exec('\/Date(1)\/')
["/Date(1)/", "1", undefined]

regExp.exec('\/Date(1330848000000-)\/')
null

regExp.exec('/Date(1330848000000-0800)\/')
["/Date(1330848000000-0800)/", "1330848000000", "0800"]

regExp.exec('\/Date(1330848000000-0800)/')
["/Date(1330848000000-0800)/", "1330848000000", "0800"]

regExp.exec('\/date(1330848000000-0800)\/')
null

regExp.exec('\/Date(1aaa848000000-0800)\/')
null

regExp.exec('\/Date(1330848000000-0a00)\/')
null
于 2013-01-30T06:25:53.573 に答える