gpt4 book ai didi

javascript - 为什么正则表达式不用作对象键匹配?

转载 作者:行者123 更新时间:2023-11-30 00:19:59 25 4
gpt4 key购买 nike

该代码非常不言自明。为什么它直接匹配,而不是通过 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: A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).

编辑:好像是

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

不起作用。我想我离自己解决它更近了,但我仍然喜欢内部机制的外部输入。

最佳答案

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

例如,

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com