Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从String.prototype.replace()方法中的回调返回正确的值?_Javascript_Arrays_Regex_String_Foreach - Fatal编程技术网

Javascript 如何从String.prototype.replace()方法中的回调返回正确的值?

Javascript 如何从String.prototype.replace()方法中的回调返回正确的值?,javascript,arrays,regex,string,foreach,Javascript,Arrays,Regex,String,Foreach,我有这个代码,它应该返回“blablalbla CAT COOL DOG CAT”,但现在它返回“blalbla C COOL D p C” 代码中的错误在方法的回调中 目前我只是返回match,这是通过replace方法过滤的值。在回调中,我想检查缩略语数组中是否存在D、P或C,如果存在,则脚本应打印缩略语,否则不应打印任何内容,因为如果缩略语数组中不存在,我不想显示任何少于3个字符的词 replace()方法的回调应该为d返回dog,为c返回cat,为p返回空字符串(“”),因为p在缩写数组

我有这个代码,它应该返回
“blablalbla CAT COOL DOG CAT”
,但现在它返回
“blalbla C COOL D p C”

代码中的错误在方法的回调中

目前我只是返回
match
,这是通过replace方法过滤的值。在回调中,我想检查
缩略语数组中是否存在D、P或C,如果存在,则脚本应打印缩略语,否则不应打印任何内容,因为如果缩略语数组中不存在,我不想显示任何少于3个字符的词

replace()方法的回调应该为d返回dog,为c返回cat,为p返回空字符串(“”),因为p在
缩写
数组中不存在

请查找附加代码:

const缩写=[
{缩写为:“d”,扩展为:“狗”},
{缩写:“c”,扩展:“cat”},
{缩写:“h”,扩展:“马”}
];
const testStringOriginal=“blalbla,/c coOL@d p 233c”;
常量过滤器模式1=/[^a-zA-Z]+//g;//查找所有非英语字母字符。
常量filterPattern2=/\b[a-zA-Z]{1,2}\b/g;//查找长度小于三个字符的单词。
常量filterPattern3=/\s\s+/g;//查找多个空格、制表符、换行符等。
常量filteredString=testStringOriginal
.替换(过滤器模式1,“”)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter
.replace(过滤器模式2,匹配=>{
控制台日志(“类型:”,匹配类型);
缩写。forEach(项目=>{
if(缩写为hasOwnProperty(项目)){
if(匹配===项目缩写){
log(“匹配是!”);
控制台日志(“匹配”,匹配);
console.log(
“对象中的缩写:”,
项目.缩写
);
return item.expansion;//返回狗、猫或马(如果匹配)
}否则{
log(“匹配-否!”);
返回“”;
}
}
});
复赛;
})
.替换(过滤器模式3,“”)
.trim()//删除前导空格和尾随空格。
.toUpperCase();//将字符串改为大写。
log(“原始字符串:”+testStringOriginal);

log(“转换字符串:+filteredString”)您从错误的函数(
forEach
callback)返回替换项。您需要使
forEach
更新一个外部变量,然后返回该变量,或者只需使用
。查找相同的

const缩写=[
{缩写为:“d”,扩展为:“狗”},
{缩写:“c”,扩展:“cat”},
{缩写:“h”,扩展:“马”}
];
const testStringOriginal=“blalbla,/c coOL@d p 233c”;
常量filteredString=testStringOriginal
.replace(/\b\w{1,3}\b/g,match=>{
让abbr=缩写.find(x=>x.缩写===match);
返回缩写?缩写扩展:“”;
});

log(“转换字符串:+filteredString”)@georg你就是那个男人!我会用完整的代码更新帖子。