gpt4 book ai didi

javascript - 如何设置 String#replace 回调的参数?

转载 作者:行者123 更新时间:2023-12-02 17:22:40 28 4
gpt4 key购买 nike

var ourData = '<h1><%= myProperty %></h1>';
var instance = this;
return ourData.replace(/<%=\s+(.*?)\s+%>/g, function (m, m1) {
return instance.model[m1];
// Here m1 is set to "<%= myProperty %>" and m1 is set to "myProperty"
// FYI, model[m1] is "Hello World"
});

我只是无法理解 mm1 如何获取值 "<%= myProperty %>""的逻辑myProperty” 分别。

有人可以向我解释一下这个参数如何获取它们所获得的值以及其背后的逻辑是什么吗?

提前致谢。

最佳答案

当您调用String#replace时传入一个函数作为第二个参数,replace将调用该函数来查找它找到的匹配项。 (如果正则表达式没有 g 标志,它将对第一个匹配项进行一次调用;如果有的话,它会对每个匹配项进行一次调用。)

每次replace调用回调时,它提供的第一个参数是整个匹配的字符串(与表达式匹配的整个字符串)。然后,它按顺序提供您在正则表达式中定义的任何捕获组的值作为后续参数。

就您而言,您的正则表达式作为一个整体匹配 <%= myProperty %> ,并且表达式中的捕获组与 myProperty 匹配.

完全主观,但我倾向于使用参数名称 m然后c0 , c1等等,提醒自己我正在处理什么。 m =“匹配”,当然还有c0是第一个捕获组,等等。

一个稍微简单的例子可能会有所帮助:Live Copy

var str = "mumble x123 blah x234 mumfff x345";

console.log("String: '" + str + "'");
str = str.replace(/x(\d+)/g, function(m, c0) {
console.log("m = '" + m + "', c0 = '" + c0 + "'");
return "y" + c0;
});
console.log("Result: '" + str + "'");

当我们运行它时,我们得到:

String: 'mumble x123 blah x234 mumfff x345'm = 'x123', c0 = '123'm = 'x234', c0 = '234'm = 'x345', c0 = '345'Result: 'mumble [123] blah [234] mumfff [345]'

...因为正则表达式作为一个整体x 匹配后跟一个或多个数字,我们使用捕获组来获取这些数字(然后返回一个替换,将这些数字放入 [] 中,省略 x )。

关于javascript - 如何设置 String#replace 回调的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788586/

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