javascript正则表达式匹配0,0-9,但不匹配0-、0-9-、0-9x

javascript正则表达式匹配0,0-9,但不匹配0-、0-9-、0-9x,javascript,regex,Javascript,Regex,我正在尝试将文本与模式0,0-9匹配,但不匹配0-,0-9-,0x,0-9x 我尝试了这些/^(\d-?\d?^[-a-zA-Z]$/和/^(\d-?\d?(!-)$/。这些都不能完全满足我的需要 你能提供更好的正则表达式并解释它是如何工作的吗?感谢您花时间来帮助解决这个问题。您可以尝试下面的正则表达式。这将不允许除数字或连字符以外的任何字符,并声明如果存在任何连字符,则必须在中间,而不是在开头或结尾 ^\d(?:-\d)?$ 或 ^\d+(?:-\d+)?$ \d+匹配一个或多个数字。所以

我正在尝试将文本与模式
0,0-9
匹配,但不匹配
0-,0-9-,0x,0-9x

我尝试了这些
/^(\d-?\d?^[-a-zA-Z]$/和/^(\d-?\d?(!-)$/
。这些都不能完全满足我的需要


你能提供更好的正则表达式并解释它是如何工作的吗?感谢您花时间来帮助解决这个问题。

您可以尝试下面的正则表达式。这将不允许除数字或连字符以外的任何字符,并声明如果存在任何连字符,则必须在中间,而不是在开头或结尾

^\d(?:-\d)?$

^\d+(?:-\d+)?$
\d+
匹配一个或多个数字。所以这也允许像
34-56
这样的字符串

/^\d+(?:-\d+)?$/.test('0-9');
//=>true
/^\d+(?:-\d+)?$/.test('0');
//=>true
/^\d+(?:-\d+)?$/.test('0x');
//=>false