正则表达式数字表达式
regex number expression
经过多年从 SO 社区吸取知识后,我在这里提出我的第一个问题。
我正在尝试为 JavaScript 网络项目创建正则表达式,以在给定字符串中查找带有千位分隔符的整数(正数或负数),或仅查找整数。
一些有效的例子:
561,085
3,894,320
-59,099
1,000
1000
-1000
1
-1
0
无效示例:
-01
01393
01,300,00
-04,044
到目前为止我已经创建了这个表达式:
\b(?:[0])|(?:(((-)?[1-9]?\d{2}|\d)((,)?\d{3})|((-)?[1-9]+\d*)))\b
(?:[0]) - 匹配前导 0
|(?:(((-)?[1-9?\d{2}|\d)((,)?\d{3}) - 或匹配 1-9 起始数字
之后的逗号和 3 位数字
|((-)?[1-9]+\d*))) - 或者只匹配整个 1-9 起始数字,不带任何逗号
我认为它在所有情况下都有效,除了当我测试一个带有 5 位数字尾随减号的字符串时,例如像这样:
值:-01110
在本例中,它接受 01110 作为匹配项。
谁能帮我弄清楚我的表达有什么问题?
也不会介意一些关于我如何在这里提出问题樱桃的一般性 pointers/feedback,干杯!
你可以使用
^(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)$
这意味着:
^ # start of the string
(?: # open par
0 # zero
| # or
-?[1-9]\d* # -100 or 234 or -121323232
| # or
-?[1-9]\d{0,2}(?:,\d{3})+ # separated by comma
) # close par
$ # end of the string
要真正“在野外”使用它(即在任何给定的文本中),您需要调整锚点以适应环顾四周:
(?<=^|\s)(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)(?=\s|$)
# ^^1^^ ^^2^^
^^1^^
表示“字符串的开头或表达式前面的一些空格”,^^2^^
表示“表达式后面的一些空格或字符串的结尾”。
再看一个demo on regex101.com。
经过多年从 SO 社区吸取知识后,我在这里提出我的第一个问题。
我正在尝试为 JavaScript 网络项目创建正则表达式,以在给定字符串中查找带有千位分隔符的整数(正数或负数),或仅查找整数。
一些有效的例子:
561,085
3,894,320
-59,099
1,000
1000
-1000
1
-1
0
无效示例:
-01
01393
01,300,00
-04,044
到目前为止我已经创建了这个表达式:
\b(?:[0])|(?:(((-)?[1-9]?\d{2}|\d)((,)?\d{3})|((-)?[1-9]+\d*)))\b
(?:[0]) - 匹配前导 0
|(?:(((-)?[1-9?\d{2}|\d)((,)?\d{3}) - 或匹配 1-9 起始数字
之后的逗号和 3 位数字|((-)?[1-9]+\d*))) - 或者只匹配整个 1-9 起始数字,不带任何逗号
我认为它在所有情况下都有效,除了当我测试一个带有 5 位数字尾随减号的字符串时,例如像这样:
值:-01110
在本例中,它接受 01110 作为匹配项。
谁能帮我弄清楚我的表达有什么问题?
也不会介意一些关于我如何在这里提出问题樱桃的一般性 pointers/feedback,干杯!
你可以使用
^(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)$
这意味着:
^ # start of the string
(?: # open par
0 # zero
| # or
-?[1-9]\d* # -100 or 234 or -121323232
| # or
-?[1-9]\d{0,2}(?:,\d{3})+ # separated by comma
) # close par
$ # end of the string
要真正“在野外”使用它(即在任何给定的文本中),您需要调整锚点以适应环顾四周:
(?<=^|\s)(?:0|-?[1-9]\d*|-?[1-9]\d{0,2}(?:,\d{3})+)(?=\s|$)
# ^^1^^ ^^2^^
^^1^^
表示“字符串的开头或表达式前面的一些空格”,^^2^^
表示“表达式后面的一些空格或字符串的结尾”。
再看一个demo on regex101.com。