我正在使用正则表达式来验证后跟分数的模式。我找到了这些,它们符合我的需要。总的来说,我想匹配1 to 2数字后跟分数。这些表达方式有何不同?
/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm
/^\d+(?:[\xbc\xbd\xbe])$/ugm
/^\w+(?:\w+)$/ugm
我需要匹配以下内容:
12½
1¼
11¾
但不匹配..
111½
11111¼
0¾
我正在使用正则表达式来验证后跟分数的模式。我找到了这些,它们符合我的需要。总的来说,我想匹配1 to 2数字后跟分数。这些表达方式有何不同?
/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm
/^\d+(?:[\xbc\xbd\xbe])$/ugm
/^\w+(?:\w+)$/ugm
我需要匹配以下内容:
12½
1¼
11¾
但不匹配..
111½
11111¼
0¾
好的开始,[0-9]匹配任何字符:(0到9)并且不一样\d
\d匹配数字 ( 0-9) 和其他数字字符,例如Unicode。
\w匹配任何单词字符(字母、数字或下划线)
尽管这些给定的表达式可能匹配相同的模式,但使用第三种解决方案最终会失败。它将匹配一个模式foobar,如您所见0-9,该模式中没有 ( ) 字符或 Unicode 分数。
通过运行快速基准测试,您的第二个解决方案16%比您的第一个解决方案慢,而且它匹配 Unicode 和其他数字字符。
我会坚持使用您的第一个表达式,并将其更改为1-2数字字符之间的匹配。
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm
甚至
/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm
尝试以下操作:
^[1-9][0-9]?[\xbc\xbd\xbe]$
[0-9]并且\d是等价的。\w匹配“单词”字符。该表达式[1-9]匹配一个不为零的数字(因为您特别询问了如何排除该数字)。
这对一些遗留的 8 位字符集进行了硬编码;为了将来的兼容性,您应该考虑切换到 Unicode。
你可以试试
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm