正则表达式不适用于javascript

时间:2015-05-08 21:46:00

标签: javascript asp.net regex

当我使用.NET引擎测试时,我有一个在regexplib.com上运行的正则表达式。它找不到与JavaScript匹配的内容。我也尝试使用以下代码的JSFiddle。它找不到匹配项。它返回null。

var re = RegExp('^\d+(?:\.\d{0,1})?$');
var myString = "123";
alert(myString.match(re));

我正在尝试在aspx网页中使用以下javascript。它找不到任何匹配项。我对这些想法持开放态度。

function ValidateData(ControlObj, ColumnType) {
var re = new RegExp('^\d+(?:\.\d{0,1})?$');

if (!ControlObj.value.match(re)) {

2 个答案:

答案 0 :(得分:8)

最好使用正则表达式文字而不是正则表达式对象:

var re = /^\d+(?:\.\d?)?$/;
var myString = "123";
alert(myString.match(re));

除非您正在动态构建正则表达式,否则无需使用RegExp对象。

否则RegExp对象需要双重转义,如:

var re = RegExp('^\\d+(?:\\.\\d?)?$');
双重转义的

原因RegExp对象将字符串作为输入,首先需要转义为字符串,第二个需要转义为正则表达式引擎。

btw \d{0,1}可以替换为\d?

答案 1 :(得分:3)

使用双重转义斜杠:

var re = RegExp('^\\d+(?:\\.\\d{0,1})?$');

它应该有用。

在JavaScript中,您可以使用文字表示法和构造函数。在字面符号中(请参阅anubhava的建议),您需要添加/ ... /,然后您不需要转义斜杠。使用RegExp对象(构造函数)时,必须转义反斜杠。

当您需要将变量传递给模式时,构造函数很好。在其他情况下,字面符号是可取的。

var re = /^\d+(?:\.\d?)?$/;

\d{0,1}\d?相同,?表示0 or 1, greedy

请参阅more about that difference on MDN

  

文字符号提供正则表达式的编译   何时评估表达式。使用文字符号时   正则表达式将保持不变。例如,如果您使用   用于构造循环中使用的正则表达式的文字符号   正则表达式不会在每次迭代时重新编译。

     

正则表达式对象的构造函数,例如new   RegExp('ab + c'),提供常规的运行时编译   表达。知道常规函数时使用构造函数   表达模式会改变,或者你不知道模式和   从其他来源获取它,例如用户输入。

     

使用构造函数时,正常的字符串转义规则   (当包含在字符串中时带有\的特殊字符前面)   必要的。