搜尋

首頁  >  問答  >  主體

正規表示式用 HTML 標籤取代幾個符號

我正在嘗試建立一個正規表示式,用一些 HTML 標記替換所有符號“$$”,例如 <someTag></someTag>

我使用這個正規表示式,但它並沒有涵蓋所有情況:

$$(\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>'

P粉362071992P粉362071992266 天前559

全部回覆(2)我來回復

  • P粉739886290

    P粉7398862902024-04-02 13:41:43

    不是正規表示式解決方案,但它有效。說明:使用分隔符號 ($$) 分割字串。然後建立一個新字串 result 並插入陣列的每個部分。然後檢查目前索引是奇數還是偶數,並根據情況添加開始標記 (prefix) 或結束標記 (suffix)。我希望這有幫助!

    function replaceTag(string, delimiter, prefix, suffix){
      
      let parts = string.split(delimiter);
      let result = '';
      
      for(let index = 0; index < parts.length; index++){
      
        result += parts[index];
      
        if(index % 2 == 0 && index < parts.length - 1){
        
          result += prefix;
        
        }
        else if(index < parts.length - 1){
        
          result += suffix;
        
        }
      
      }
      
      return result;
    
    }
    
    console.log(replaceTag('aaa $3$$ c$ ddd', '$$', '', ''));
    console.log(replaceTag('aaa $3$$ c$ $$ddd$$', '$$', '', ''));

    回覆
    0
  • P粉592085423

    P粉5920854232024-04-02 09:46:01

    最快的方法是使用非貪婪的點全法:/\$\$(.*?)\$\$/sg
    #https://regex101.com/r/upveAX/1
    單獨使用點總是會更快,因為它不依賴斷言或類別結構,
    這會增加 3 倍的效能開銷。

    console.log('aaa $3$$ c$ ddd'.replace(/$$(.*?)$$/sg, ''));
    
    console.log('aaa $3$$ c$ $$ddd$$'.replace(/$$(.*?)$$/sg, ''));

    回覆
    0
  • 取消回覆