使用正则表达式替换html标签之外的特殊字符

我正在尝试查找并替换一些特殊的 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'


富国沪深
浏览 284回答 1
1回答

哔哔one

您可以使用s&nbsp;=&nbsp;s.replace(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;RegExp("(<[^<>]*>)|"&nbsp;+&nbsp;obj.reg.replace(/[-\/\\^$*+?.()|[\]{}]/g,&nbsp;'\\$&'),&nbsp;"g"),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;($0,&nbsp;$1)&nbsp;{&nbsp;return&nbsp;$1&nbsp;?&nbsp;$0&nbsp;:&nbsp;obj.replace&nbsp;}&nbsp;);笔记:你需要逃避的obj.reg使用正则表达式表达之前,因此.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')需要在(<[^<>]*>)|备选的匹配和捕获到组1级&nbsp;<...>之前所需的比赛和在作为替换参数传递的回调方法的子串,还有一个检查,如果所述第一组匹配。如果是,则整个匹配项按原样返回,否则进行替换。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript