基于正则表达式匹配调用javascript函数
在下面的字符串中,我想用适当的下拉菜单替换[choice:a3d]。我不确定在冒号之后和右大括号之前,选项需要如何格式化基于正则表达式匹配调用javascript函数,javascript,jquery,regex,Javascript,Jquery,Regex,在下面的字符串中,我想用适当的下拉菜单替换[choice:a3d]。我不确定在冒号之后和右大括号之前,选项需要如何格式化 string = "operation [number] [choice:a3d] [number]"; 我不确定.replace函数来自何处,但我正在使用的代码已经导入了jquery string.replace(/(?:\[choice\:)(\w+)(?:\])/g, choice_func); 其中: function choice_func(choice_lis
string = "operation [number] [choice:a3d] [number]";
我不确定.replace函数来自何处,但我正在使用的代码已经导入了jquery
string.replace(/(?:\[choice\:)(\w+)(?:\])/g, choice_func);
其中:
function choice_func(choice_lists, listname, default_opt)
{
console.log("choice_lists: "+choice_lists); // [choice:a3d]
console.log("listname: "+listname); // a3d
console.log("default_option: "+default_opt); // 67
var list = choice_lists[listname];
return '<span class="string ' + listname + ' autosocket"><select>' +
list.map(function(item)
{
if (item === default_opt){
return '<option selected>' + item + '</option>';
}else{
return '<option>' + item + '</option>';
}
}).join('') +'</select></span>';
}
function choice\u func(选项列表、列表名、默认选项)
{
log(“选项列表:”+选项列表);/[choice:a3d]
log(“listname:+listname);//a3d
log(“default_option:+default_opt);//67
var list=choice_lists[listname];
返回“”+
列表.映射(功能(项)
{
如果(项目===默认选项){
返回“”+项目+“”;
}否则{
返回“”+项目+“”;
}
}).连接(“”)+“”;
}
不用说代码失败了,错误为“UncaughtTypeError:无法调用未定义的方法'map'”
函数的参数从何而来
不要假设这些代码中的任何一个都是正确的……在我看来,您只需使用需要使用的代码来计算替换字符串,然后使用字符串而不是regex函数进行替换就可以了。当您需要检查匹配的上下文以确定替换内容时,最好使用正则表达式函数,而不是在您只是对可以事先计算的内容进行替换时。它可以这样工作——只是不需要那么复杂 当使用regex回调时,回调会得到多个参数——第一个参数是匹配字符串,还有许多其他参数被记录在案。然后,您必须从该函数返回一个字符串,该字符串就是您要替换它的字符串。你的函数假装它有三个参数,但它没有,因此它不会工作 我建议您计算替换字符串,然后在没有regex回调函数的情况下对其进行普通文本替换 如果您能更清楚地了解初始字符串是什么以及要在其中替换什么,我们可以给您一些示例代码。正如您在问题中所展示的,您的字符串声明甚至与合法的javascript不太接近,我也不清楚您到底想在该字符串中替换什么 伪代码如下所示:
var menuStr = "xxxxxxx";
var replaceStr = choice_func(lists, name, options);
menuStr = menuStr.replace(/regular expression/, replaceStr);
这个问题有点让人困惑,你认为你能用你想要实现的东西创建一个jsbin示例吗?这有帮助吗?我建议您不要这样编写代码。记住我的建议,当你3年后回到这个代码。