正则表达式应该没有失败

per*_*ija 1 javascript regex jquery

我有一个正则表达式:

var pat = new RegExp("[0-9]{1}\.[0-9]{1}");
Run Code Online (Sandbox Code Playgroud)

我使用jQuery从文本框中获取一个数字:

var theValue = $(item).val();
Run Code Online (Sandbox Code Playgroud)

我一直在用这一行输入数字和测试正则表达式:

alert(pat.test(theValue));
Run Code Online (Sandbox Code Playgroud)

如果我输入数字.111则通过.这不应该是这种情况,因为第一个数字必须是0-9,然后是一个句点,然后是另一个数字0-9.我看不出我做错了什么.

I H*_*azy 6

要在字符串中使用,您需要转义\以便显示反斜杠字符.

var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");
Run Code Online (Sandbox Code Playgroud)

一个更简洁,也许更可靠的形式是:

/[0-9]\.[0-9]/
Run Code Online (Sandbox Code Playgroud)

假设模式应匹配单个数字,后跟一个句点,后跟另一个单个数字.

  • +1首先发现这个,但值得指出`{1}`是_never_ required,正则表达式文字(例如`/\d \.\ d /`)会比静态正则表达式的RegExp构造函数更好.如果只是在风格的理由. (2认同)

She*_*ger 5

您的反斜杠正在执行字符串转义而不是正则表达式转义.使用:

new RegExp("[0-9]{1}\\.[0-9]{1}");
Run Code Online (Sandbox Code Playgroud)

或者首选的正斜杠(RegExp literal)语法:

/[0-9]{1}\.[0-9]{1}/
Run Code Online (Sandbox Code Playgroud)

编辑:另外,正如ianpgall指出的那样,{1}不是必需的,因为[0-9]除非后面跟着a,否则字符类不是延迟的?.