使用 Javascript 和正则表达式替换 HTML 字符

Using Javascript and Regex to replace HTML Characters

本文关键字:HTML 字符 替换 正则表达式 Javascript 使用      更新时间:2023-09-26

提前感谢您的帮助。

我需要在应用程序中删除所有 HTML 字符并将它们替换为等效的 HTML 编号。

例如:

‡, •, -, ‰, € and ™

成为:

‡, •, -, ‰, € and ™

目前有很多问题,但这些问题恰恰相反。

我有我想在 JSON 对象中转换的所有字符(这只是一个更大列表的快照,只是为了证明我的 JSON 很好):

{"ch":"‘","sub":"‘"},
{"ch":"’","sub":"’"},
{"ch":"‚","sub":"‚"},
{"ch":"“","sub":"“"},
{"ch":"”","sub":"”"},
{"ch":"„","sub":"„"},
{"ch":"†","sub":"†"},
{"ch":"‡","sub":"‡"},
{"ch":"•","sub":"•"},
...

我目前循环(在这里使用原型)并尝试替换它们:

oJSONItems.each(function(o){
    var oRG = new RegExp(o.ch,'g');
    oText = oText.replace(oRG,o.sub);
});
有些

正在被替换,但有些没有...

‡
•
-
‰
€
™

最重要的是,我需要知道为什么像字符一样无法转换。

谢谢。

与其为特定实体编写代码,不如替换原始 7 位 ASCII 范围之外的任何内容

str = str.replace(/[^'011'012'015'040-'177]/g, function(x) {
    return '&#' + x.charCodeAt(0) + ';'
})

(正则表达式匹配任何不是空格或"正常"ASCII 字符的内容)

或者,编写映射,使是要替换的字符,值是实体:

var map = { '£' : '£' }
str = str.replace(/./g, function(x) {
    return (x in map) ? map[x] : x;
});

请注意,两个版本只对集合中的每个可能实体进行一次正则表达式调用,而不是一次。 这应该使代码比基于循环的方法快一些。