JavaScript正则表达式返回false?

时间:2014-05-30 17:32:13

标签: javascript regex

我正在学习javascript,这对我来说没有意义。如果字符匹配,则test()返回true或false。那么有人可以解释为什么我的代码不起作用?

var str = "hello*3";
var arr = str.split('');

for(var i in arr){
    re = new RegExp("/[a-z]/i");
    if(re.test(arr[i])) {
        console.log(String.fromCharCode(arr[i].charCodeAt() + 1));   
    }
}

re.test(arr[0]); //arr[0] == 'h'
// false

更新示例:

var re = new RegExp("/[a-z]/i");
re.test('h');
// returns 'false' (I'm expecting this to be true)

2 个答案:

答案 0 :(得分:5)

使用/时你不需要RegExp并且你将旗帜作为第二个参数传递

这应该有效re = new RegExp("[a-z]", "i");

或文字形式

re = /[a-z]/i;

可以在MDN上找到更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

上面链接中的一些信息

构造 文字和构造函数符号是可能的:

/pattern/flags; 
new RegExp(pattern [, flags]);

<强>图案

正则表达式的文本。

<强>标志

如果指定,flags可以包含以下值的任意组合:

全球比赛

I

忽略大小写

多行;将开始和结束字符(^和$)视为多行(即匹配每行的开头或结尾(由\ n或\ r分隔),而不仅仅是整个输入字符串的开头或结尾)< / p>

ý

粘;仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(并且不会尝试与任何后续索引匹配)。这允许角色的匹配启动功能&#34; ^&#34;通过更改lastIndex属性的值,有效地在字符串中的任何位置使用。

答案 1 :(得分:2)

如果您想创建 RegExp Object ,则必须提供正确的语法。

语法:

var re = new RegExp(pattern, modifiers);
var re = /pattern/modifiers;

所以你可以在这里使用以下任何一种。

var re = new RegExp('[a-z]', 'i');
var re = /[a-z]/i;