正则的替换问题

function replaceTagToEntitySymbol(html){

    var s = html.replace(/</g,'&lt;')
        s = s.replace(/>/g,'&gt;')
    return s;

}

这是一个字符串'<div class="html-editor-pop"><p class="html-editor-code-desc">生成代码,可复制粘贴使用:</p><textarea class="html-editor-code"></textarea></div>'

希望用正则替换<符号到 lt; > 符号到 gt;(lt;和gt;省略了&,会被识别为< >)上面是自己写的一个函数,正则可否优化成一个正则表达式?

阅读 2.4k
2 个回答

这个好像不行吧,你是两个条件对应两个结果,不能写成一个;

正则表达式的分组匹配:/(&lt;|&gt;)/g

var test = '&lt;span&gt;'.replace(/(&lt;|&gt;)/g, function(m) {
    if(m == '&lt') {
        return '<';
    } else if(m == '&gt') {
        return '>';
    }
});

下面是稍微好点的方法:

但是有几个问题,Object.keys的兼容问题,如果map的key中包含要转义的字符,例如'.'等。需要在转换前处理,或者写key的时候注意。

var map = {
    '&lt;' : '<',
    '&gt;' : '>'
};
var test = '&lt;span&gt;'.replace(new RegExp('(' + Object.keys(map).join('|') + ')', 'g'), function(m) {
    return map[m];
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题