我不是正规的表达大师,所以我正在寻求帮助来提出一个像这样工作的正则表达式:
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']
答案 0 :(得分:5)
如果字符串从不包含时间和时区之外的任何其他数字,则可以使用此正则表达式:
/(\d+)(?:-(\d+))?/
加入你的代码:
var regex = /(\d+)(?:-(\d+))?/;
// regex.exec...
如果您确实需要验证 并从字符串中提取数字:
/^\/Date\((\d+)(?:-(\d+))?\)\/$/
上面的正则表达式将检查字符串是否遵循确切的格式,并且还提取数字。
答案 1 :(得分:1)
以下正则表达式检查您所需的约束:
\\/Date\((\d{13})(-(\d{4}))?\)\\/
检查\
后跟/
,后跟文本Date
,后跟括号内的13位数字和-
后跟4位数的可选序列,然后是必需的\
和/
。
\\
匹配单个\
,需要转义,因为它是正则表达式中的特殊字符。同样适用于(
和)
。
从这里,$ 1匹配括号内的13位数字,$ 3匹配4位数字(如果存在)。
答案 2 :(得分:0)
我一直在玩正则表达式,最后得到它
javascript正在忽略转义斜杠,所以这就是我提出的解决方案(在chrome控制台上测试)
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