我正在嘗試構(gòu)建一個正則表達(dá)式,用一些 HTML 標(biāo)記替換所有符號“$$”,例如 <someTag></someTag>
。
我使用這個正則表達(dá)式,但它并沒有涵蓋所有情況:
$$(\S[^\*]+\S)$$
'aaa $3$$ c$ ddd'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>') // works 'aaa $3$$ c$ $$ddd$$'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>') // doesn't work, should be 'aaa <a1>123</a1> c$ <a1>ddd</a1>'
console.log('aaa $3$$ c$ ddd'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>')) // works console.log('aaa $3$$ c$ $$ddd$$'.replace(/$$(\S[^\*]+\S)$$/g, '<a1></a1>')) // doesn't work, should be 'aaa <a1>123</a1> c$ <a1>ddd</a1>'
不是正則表達(dá)式解決方案,但它有效。說明:使用分隔符 ($$
) 分割字符串。然后創(chuàng)建一個新字符串 result
并插入數(shù)組的每個部分。然后檢查當(dāng)前索引是奇數(shù)還是偶數(shù),并根據(jù)情況添加開始標(biāo)記 (prefix
) 或結(jié)束標(biāo)記 (suffix
)。我希望這有幫助!
function replaceTag(string, delimiter, prefix, suffix){ let parts = string.split(delimiter); let result = ''; for(let index = 0; index ', '')); console.log(replaceTag('aaa $3$$ c$ $$ddd$$', '$$', '', ' '));
最快的方法是使用非貪婪的點(diǎn)全方法:/\$\$(.*?)\$\$/sg
https://regex101.com/r/upveAX/1
單獨(dú)使用點(diǎn)總是會更快,因?yàn)樗灰蕾囉跀嘌曰蝾惤Y(jié)構(gòu),
這會增加 3 倍的性能開銷。
console.log('aaa $3$$ c$ ddd'.replace(/$$(.*?)$$/sg, '')); console.log('aaa $3$$ c$ $$ddd$$'.replace(/$$(.*?)$$/sg, ' '));