我正在尝试编写一个正则表达式来确保years文本有效。以下均为有效年份
这是我支持的正则表达式
^(-?)([0-9]+)\s*(BC|AD){0,1}$
但是它有一个不足之处。上面的正则表达式还找到了以下内容的匹配项:
所以基本上,如果发生以下任何情况,我不希望正则表达式找到匹配项:
我该怎么做?
谢谢。
考虑:
let re = String.raw`
^ # begin
(
(
# negative
-
[1-9] [0-9]{0,3} # dont allow leading zeroes
)
|
(
# positive
[1-9] [0-9]{0,3} # dont allow leading zeroes
(
# AD/BC
\s*
(AD | BC)
)?
)
|
(
# special case
0
)
)
$ # end
`
//
re = new RegExp(re.replace(/\s+|#.+/g, ''))
console.log(re)
tests = `
2023
300
-1
40AD
40 AD
3000 BC
200BC
-200AD
-700BC
0BC
0AD
-0
-0BC
-0AD
`.trim().split('\n').map(s => s.trim()).forEach(s => console.log(s, re.test(s)))
正则表达式是程序,为什么人们坚持不加空格和缩进呢? ;)