【问题标题】:Passing $& in replace()-function to another function将 replace() 函数中的 $& 传递给另一个函数
【发布时间】:2021-08-02 20:00:00
【问题描述】:

此代码将获取 str 并将每个单词放在 <span> 中。我想添加一些功能,所以会突出显示一些单词,但无法弄清楚如何将 $& (这是一个单词)传递给 highLight 函数。现在我已经写了{$&},但它不起作用。

str = "Adam Sandler"
const highLight = (param) => {
 conosle.log(param)
}

const wrapWordsInSpan = (str) => {
   const addedSpanToText = str.replace(
     /\w+/g,
     `<span id="text-container" style="color: ${highLight(`{$&}`)}"}>$&</span>`
   );

【问题讨论】:

    标签: javascript html reactjs replace


    【解决方案1】:

    你真的很接近,但如果你想动态使用该值(例如,调用highlight),你必须将一个函数作为第二个参数传递给replace,像这样:

    const wrapWordsInSpan = (str) => {
        const addedSpanToText = str.replace(
           /\w+/g,
           match => `<span id="text-container" style="color: ${highLight(match)}"}>${match}</span>`
        );
        return addedSpanToText;
    };
    

    match =&gt; `&lt;span id="text-container" style="color: ${highLight(match)}"}&gt;${match}&lt;/span&gt;` 部分是函数。它使用匹配的文本作为参数调用(相当于字符串中的$&amp; 标记),我在上面调用了match(捕获组值是后续参数,详细信息on MDN)。它返回的内容被用作替换:

    const wrapWordsInSpan = (str) => {
        const addedSpanToText = str.replace(
           /\w+/g,
           match => `<span id="text-container" style="color: ${highLight(match)}"}>${match}</span>`
        );
        return addedSpanToText;
    };
    
    const highLight = (param) => {
        return param === "Adam" ? "green" : "black";
    };
    
    const str = "Adam Sandler"
    
    console.log(wrapWordsInSpan(str));

    【讨论】:

    • 很好的答案!有没有办法将单词的起始索引也传递给函数?没关系,我解决了!正如您链接的文档所建议的那样,可以使用 (p1,p2) 而不是 match 来获取索引为 p2。
    猜你喜欢
    • 2019-07-25
    • 2014-01-06
    • 2019-10-09
    • 1970-01-01
    • 2012-09-25
    • 2020-10-03
    • 1970-01-01
    相关资源
    最近更新 更多