为什么这个正则表达式在javascript中评估为false?

时间:2015-10-01 15:37:48

标签: javascript regex

我正在寻找一个0-9位的字符串,没有其他字符。

这是警告我" false"值:

var regex = new RegExp('^[\d]{0,9}$');
alert(regex.test('123456789'));

这些返回true,我理解为什么(^和$表示整个字符串需要匹配,而不仅仅是字符串中的匹配):

var regex = new RegExp('[\d]{0,9}');
alert(regex.test('123456789'));

-

var regex = new RegExp('[\d]{0,9}');
alert(regex.test('12345678934341243124'));

然后返回true:

var regex = new RegExp('^[\d]{0,9}');
alert(regex.test('123456789'));

为什么,当我添加" $"最后这可能会失败吗?

我需要做些什么来解决它?

3 个答案:

答案 0 :(得分:8)

使用时

var regex = new RegExp('^[\d]{0,9}$');

语法,你将正则表达式作为

/^[d]{0,9}$/

请注意\d已变为d

此正则表达式/^[d]{0,9}$/仅匹配d 0到9次。

RegExp使用字符串来定义正则表达式,\也用作字符串中的转义符号,因此\中的\d被视为转义字符。< / p>

通过将\与其他\一起推进来逃避var regex = new RegExp('^[\\d]{0,9}$');

RegExp

我建议您使用正则表达式文字语法而不是令人困惑的var regex = /^\d{0,9}$/; 语法。

true

修改

使用var regex = new RegExp('^[\d]{0,9}');时获得d的原因是因为正则表达式意味着字符串应以任何数量的d开头,包括0到9。因此,当字符串不以0开头时,由于var regex = /^\d{1,9}$/; 是最小的出现次数,因此条件是分层的。

您可能想要检查字符串是否以1到9位开头。

render: function() {
    this.model.each(function(m) {
         if(~m.get('partner_id') === 0)
             return;
         /* render m here */
    });
}

答案 1 :(得分:2)

在定义RegExp对象时,应该使用正则表达式文字(不带引号并使用开始和结束斜杠)。当正则表达式保持不变时,这是推荐的方法,这意味着每次使用它时都不需要编译它。这为您提供了理想的结果:

<add key="ArchiveDirectory" value="C:\Users\rsanchez\Desktop\testing\{foldername}\Archives\" />

答案 2 :(得分:-5)

因为$表示行尾,而你的字符串没有行尾作为最后一个字符

可能您正在寻找“\ z”