簡體   English   中英

使用正則表達式替換html標簽之外的特殊字符

[英]Using regular expression to replace special characters outside of html tags

我正在嘗試查找並替換一些特殊的html實體,即'&'轉換為& 和'>'轉換為> 這是用於電子郵件構建器工具,某些較舊的客戶端需要將字符替換為html實體。

用戶通過字符串傳遞,而我使用javascript遍歷對象數組。 這將找到一個字符並將其替換為正確的html實體。

您可以在這里查看我使用的正則表達式代碼:

https://regex101.com/r/WZh5tA/2

    escapeCharacter: function(string){
      var replaceChar = [
        {reg : '&', replace: '&'},
        {reg : '"', replace: '"'},
        {reg : '£', replace: '£'},
        {reg : '€', replace: '€'},
        {reg : 'é', replace: 'é'},
        {reg : '–', replace: '–'},
        {reg : '®', replace: '®'},
        {reg : '™', replace: '™'},
        {reg : '‘', replace: '‘'},
        {reg : '’', replace: '’'},
        {reg : '“', replace: '“'},
        {reg : '”', replace: '”'},
        {reg : '#', replace: '#'},
        {reg : '©', replace: '©'},
        {reg : '@', replace: '@'},
        {reg : '$', replace: '$'},
        {reg : '\\(', replace: '('},
        {reg : '\\)', replace: ')'},
        {reg : '<', replace: '&lt;'},
        {reg : '>', replace: '&gt;'},
        {reg : '…', replace: '&hellip;'},
        {reg : '-', replace: '&#45;'},
        {reg : "'", replace: '&#39;'},
        {reg : '\\*', replace: '&#42;'},
        {reg : ',', replace: '&sbquo;'}
    ];
    var s = string;
    replaceChar.forEach(function(obj){
      var regEx = new RegExp(obj.reg+"(?!([^<]+)?>)", "g");
      s = s.replace(regEx, obj.replace);
    });

    return s
  }

當用戶傳遞帶有html標記的字符串(應允許這樣做)時,就會發生此問題。 例如,字符串可以是:

'This is an example of some <b>bold</b> text'

我的查找和替換工具很神奇,但是我想我丟失了一些東西,因為我得到了以下輸出:

'This is an example of some <b>bold</b&gt; text'

您可以使用

s = s.replace(
      new RegExp("(<[^<>]*>)|" + obj.reg.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "g"), 
          function ($0, $1) { return $1 ? $0 : obj.replace } 
);

筆記:

  • 在用於正則表達式之前,需要先轉義 obj.reg ,因此.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')為必填項
  • (<[^<>]*>)| 可選匹配,並在所需匹配之前捕獲到組1 <...>子字符串中,並在作為替換參數傳遞的回調方法中檢查第一個組是否匹配。 如果匹配,則將整個匹配照原樣返回,否則將進行替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM