该代码是不言自明的。为什么直接匹配而不是通过for..in引入匹配?



// just for snippet
function print(x) { document.write(x + "<br>\n"); }

var routes = { };
routes[/[0-9]+/] = function(x) { print("number(" + x + ")"); }

function handle(x) {
    for (var r in routes) {
        print("trying " + r + " on " + x);
        if (x.match(r)) {
            print("hit");
            return routes[r](x);
        }
    }
}

handle("test");
handle("5");

// however
print("5".match(/[0-9]+/));





我认为是因为for..in转换为String的事实,但是根据MDN docs on match


  regexp:正则表达式对象。如果传递了非RegExp对象obj,则使用new RegExp(obj)将其隐式转换为RegExp。


编辑:
看起来

"5".match("/[0-9]+/")


不起作用我想我已经接近靠自己解决问题了,但是我仍然喜欢内部机制的外部输入。

最佳答案

当您传递RegExp文字时,末尾的/也作为字符串的一部分包括在内。这就是为什么它们不匹配的原因。

例如,

console.log(new RegExp("/[0-9]+/"))
/\/[0-9]+\//


如您在上面的示例中看到的,/也被转义并包含在正则表达式中。

关于javascript - 为什么正则表达式不用作对象键匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33496247/

10-16 21:22