我正在使用JavaScript设置输入的值,其中包含可能包含HTML特定字符的文本,例如&
等等。所以,我试图找到一个匹配的正则表达式这些值并分别用适当的值(“&”,“”)替换它们,只是我无法弄清楚正则表达式。
这是我的尝试:
创建一个包含匹配项的对象和对替换值的引用:
var specialChars = {
" " : " ",
"&" : "&",
">" : ">",
"&lt;" : "<"
}
然后,我想匹配我的字符串
var stringToMatch = "This string has special chars &amp; and &nbsp;"
我试过像
这样的东西stringToMatch.replace(/(&nbsp;|&)/g,specialChars["$1"]);
但它不起作用。我真的不明白如何捕获特殊标签并替换它。非常感谢任何帮助。
答案 0 :(得分:17)
我认为您可以使用稍微不同主题的问题中的函数(Efficiently replace all accented characters in a string?)。
Jason Bunting的回答有一些很好的想法+必要的解释,这是他的解决方案,经过一些修改让你开始(如果你觉得这很有帮助,也可以提出他原来的答案,因为这是他的代码,基本上)。
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
return s.replace(translate_re, translator);
};
})();
可以调用
var stringToMatch = "This string has special chars & and &nbsp;";
var stringOutput = replaceHtmlEntites(stringToMatch);
编号的内容更加容易,你可以使用一点点数学和String.fromCharCode()
来更换它们。
另一种更简单的可能性就是这样(适用于任何浏览器)
function replaceHtmlEntites(string) {
var div = document.createElement("div");
div.innerHTML = string;
return div.textContent || div.innerText;
}
replaceHtmlEntites("This string has special chars < & >");
// -> "This string has special chars < & >"
答案 1 :(得分:2)
另一种方法是创建一个div对象
var tmp = document.createElement("div");
然后将文本分配给其innerHTML
tmp.innerHTML = mySpecialString;
最后阅读元素的文字内容
var output = tmp.textContent || tmp.innerText //for IE compatibility
然后你去......
答案 2 :(得分:1)
您可以使用基于功能的替换来执行您想要执行的操作:
var myString = '&'+'nbsp;&'+'nbsp;&tab;©';
myString.replace(/&\w+?;/g, function( e ) {
switch(e) {
case ' ':
return ' ';
case '&tab;':
return '\t';
case '©':
return String.fromCharCode(169);
default:
return e;
}
});
但是,我建议你考虑一下你的情况。如果您正在接收&amp; nbsp;和&amp;复制;和你的文本值中的其他HTML实体,你真的想要替换它们吗?你之后应该转换它们吗?
要记住一些事情。
干杯!
答案 3 :(得分:0)
一种不使用痛苦的开关/案例陈述的现代变体:
const toEscape = `<code> 'x' & "y" </code> <\code>`
toEscape.replace(
/[&"'<>]/g,
(char) => ({
"&": '&',
"\"": '"',
"'": ''',
"<": '<',
">": '>',
})[char]
)
或者,因为这真的应该变成一个函数:
const encodeHTML = function(str) {
const charsToEncode = /[&"'<>]/g
const encodeTo = {
"&": '&',
"\"": '"',
"'": ''',
"<": '<',
">": '>',
}
return str.replace(charsToEncode, char => encodeTo[char])
}
(此字符列表是根据list of XML-escape-char-codes available on wikipedia选择的。)
答案 4 :(得分:0)
替换HTML标签和HTML特殊字符的更好方法是将它们替换为REGEX
str.replace(/<[^>]*>/g, '').replace(/[^\w\s]/gi, '')