我正在尝试查找并替换一些特殊的 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: '<'}, {reg : '>', replace: '>'}, {reg : '…', replace: '…'}, {reg : '-', replace: '-'}, {reg : "'", replace: '''}, {reg : '\\*', replace: '*'}, {reg : ',', replace: '‚'} ]; 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> 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级<...>
之前所需的比赛和在作为替换参数传递的回调方法的子串,还有一个检查,如果所述第一组匹配。如果是,则整个匹配项按原样返回,否则进行替换。
添加回答
举报
0/150
提交
取消