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

时间:2017-09-21 22:32:00

标签: javascript arrays regex string foreach

我有这段代码,它应该返回"BLABLABLALBLA CAT COOL DOG CAT",但它现在返回"BLABLABLALBLA C COOL D P C" ...

代码中的错误在String.prototype.replace()方法的回调中。

目前我只是返回match,这是已被replace方法过滤的值。在回调中,我想检查abbreviations数组中是否存在D,P或C,如果它们确实存在则脚本应该打印出缩写,否则它不应该打印出来,因为我不想要显示任何少于3个字符的单词,如果它们不存在于缩写数组中。

replace()方法的回调应该返回dog for d,cat for c和for p应该只返回一个空字符串(""),因为p不存在于{{1数组。

请参阅附件代码:



abbreviations




1 个答案:

答案 0 :(得分:1)

您从错误的函数(forEach回调)返回替换。您需要让forEach更新外部变量,然后返回该变量,或者只需使用.find



const abbreviations = [
    {abbreviation: "d", expansion: "dog"},
    {abbreviation: "c", expansion: "cat"},
    {abbreviation: "h", expansion: "horse"}
];

const testStringOriginal = "      blablablalbla,  / c  coOL @ d p  233c    ";

const filteredString = testStringOriginal
    .replace(/\b\w{1,3}\b/g, match => {
        let abbr = abbreviations.find(x => x.abbreviation === match);
        return abbr ? abbr.expansion : '';
    });

console.log("CONVERTED STRING:" + filteredString);