为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2021-06-15 12:08:58
我正在尝试查找并替换一些特殊的 html 实体,即 '&' 转换为&amp;'>' 转换为&gt;. 这是一个电子邮件生成器工具,一些老客户需要用 html 实体替换字符。用户传递一个字符串,我使用 javascript 循环遍历一个对象数组。这将找到一个字符并将其替换为正确的 html 实体。您可以在此处查看我正在使用的正则表达式代码:https://regex101.com/r/WZh5tA/2    escapeCharacter: function(string){      var replaceChar = [        {reg : '&', replace: '&amp;'},        {reg : '"', replace: '&quot;'},        {reg : '£', replace: '&pound;'},        {reg : '€', replace: '&euro;'},        {reg : 'é', replace: '&eacute;'},        {reg : '–', replace: '&ndash;'},        {reg : '®', replace: '&reg;'},        {reg : '™', replace: '&trade;'},        {reg : '‘', replace: '&lsquo;'},        {reg : '’', replace: '&rsquo;'},        {reg : '“', replace: '&ldquo;'},        {reg : '”', replace: '&rdquo;'},        {reg : '#', replace: '&#35;'},        {reg : '©', replace: '&copy;'},        {reg : '@', replace: '&commat;'},        {reg : '$', replace: '&dollar;'},        {reg : '\\(', replace: '&#40;'},        {reg : '\\)', replace: '&#41;'},        {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'
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

您可以使用

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

笔记:

  • 你需要逃避obj.reg使用正则表达式表达之前,因此.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')需要

  • (<[^<>]*>)|备选的匹配和捕获到组1级 <...>之前所需的比赛和在作为替换参数传递的回调方法的子串,还有一个检查,如果所述第一组匹配。如果是,则整个匹配项按原样返回,否则进行替换。


查看完整回答
反对 回复 2021-06-18
  • 1 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信