2017-08-29 52 views
2

我想在span標記中包裝動態不敏感字符串,但$ 1在輸出中。請幫幫我。在span標記中包裝動態不敏感字符串

 function focusSearchValue(data, value){ 
 
     \t \t var regEx = new RegExp((value), "ig"); 
 
    \t \t \t data = data.replace(regEx, "<span class=''>$1</span>"); 
 
       console.log(data); 
 
     } 
 
    
 
    focusSearchValue('SharePoint 2016, Team Collaboration Software Tools', 'sharepoint');

回答

1

各地value括號是不是模式的一部分,因此,你的正則表達式沒有定義捕獲組,即$1可能是指從字符串替換模式。這就是爲什麼$1作爲替換結果作爲文字字符串傳遞的原因。

您需要使用$&指整場比賽(見String#replace "Specifying a string as a parameter" section),並返回字符串:既然你傳遞一個變量的正則表達式引擎應該是

function focusSearchValue(data, value){ 
 
     var regEx = new RegExp(value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "ig"); 
 
     return data.replace(regEx, "<span class=''>$&</span>"); 
 
} 
 

 
console.log(focusSearchValue('SharePoint 2016, Team Collaboration Software Tools', 'sharepoint'));

被解析爲文字字符串,建議轉義所有可能充當特殊正則表達式元字符的特殊字符,因此增加了轉義.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')

+0

太謝謝你了, 有效。在這裏您將值存儲在$&?中 –

+0

這是正則表達式引擎,它將整個匹配存儲在組0中,並且可以使用$&替換反向引用來訪問該值。 –

+1

太棒了,再次感謝。 –

0

我覺得這句法是一個更直觀一點,在傳遞一個函數作爲replace第二個參數(詳細信息:function as argumentregex escaping search terms):

const reEscape = searchTerm => (
 
    searchTerm.replace(/[-{}()[/*+?.^$|\]\\]/g, "\\$&") 
 
); 
 

 
const addSpan = $1 => `<span>${$1}</span>`; 
 

 
const focusSearchValue = (data, value) => { 
 
    const regex = new RegExp(`${reEscape(value)}`, 'ig'); 
 
    return data.replace(regex, addSpan); 
 
}; 
 

 
console.log(focusSearchValue('SharePoint 2016, Team Collaboration Software Tools', 'sharepoint'));

相關問題