相同的JavaScript函数返回随机结果

Por*_*oru 3 javascript

我糊涂了:

function is_valid(name) {
    var regexp_name = /^(\d|\w)*$/gi;
    return regexp_name.test(name);
}
Run Code Online (Sandbox Code Playgroud)
// Console
console.log(is_valid("Test"));
=> true

console.log(is_valid("Test"));
=> false

console.log(is_valid("Test"));
=> true

console.log(is_valid("Test"));
=> false
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ken*_*ytm 6

删除/g标志.

RegExp对象以某种方式重用.当/g标志存在时,正则表达式引擎将从先前匹配的位置开始,直到消耗掉整个字符串.

 1st call:       Test
                 ^
 after 1st call: Test   (found "Test")
                     ^
 2nd call:       Test
                     ^
 after 2nd call  Test   (found nothing, reset)
                 ^
Run Code Online (Sandbox Code Playgroud)

BTW,\w相当于[0-9a-zA-Z_]Javascript.因此,\d|/i标志是多余的.而且由于你没有使用捕获的组,所以没有必要保留(…).以下就足够了:

var regexp_name = /^\w*$/;
Run Code Online (Sandbox Code Playgroud)

  • 好的,但为什么呢?解释怎么样? (3认同)