该代码是不言自明的。为什么直接匹配而不是通过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/