我正在尝试更换"悉尼&墨尔本"与&
。
但它没有用。
我尝试了以下几种不同的方法:
使用for循环和if语句:
&
使用正则表达式并替换:
for(var i=0; i<str.length; i++){
if(str[i]==="&"){
str[i]="&";
}
我确实理解var myRegExp = /\b&\b/;
str = str.replace(myRegExp,"&");
return str;
和&
是相同的事情,因此结果可能会出现在&
(实际上它正在我写作时发生这里堆栈溢出)。但它有办法吗?
答案 0 :(得分:3)
with for循环和if语句:
for(var i=0; i<str.length; i++){
if(str[i]==="&"){
str[i]="&";
}
}
当然这不起作用。 JS字符串是immutable,这意味着
创建字符串后,无法对其进行修改
它不会导致运行时错误,但它不会执行任何操作。 (即使JS字符串不是不可变的,它们也不能用多个字符替换一个字符。)
使用正则表达式并替换:
var myRegExp = /\b&\b/;
str = str.replace(myRegExp,"&");
return str;
当然这不起作用。空格和符号之间没有字边界。请参阅word boundary:
的定义单词边界匹配单词字符未被跟随或前面有另一个单词字符的位置。
其中“单词字符”等同于[a-zA-Z0-9_]
。
然而,真正的问题是你想要这样做的原因。如果您只想将此字符串作为文本插入DOM,请使用textContent
:
document.getElementById("city").textContent = "Sydney & Melbourne";
(而不是使用innerHTML
)。在jQuery中,如果您正好使用它,请使用text()
而不是html()
。这种方法的优点是不会被字符串中的其他HTML字符混淆,特别是<
。
如果您的问题与网址中的&
有关,则不应该是HTML转义 - 您应该对其进行URI编码,但您可能已经知道了。
如果您的问题是将此传递给需要正确编码的HTML字符串的服务器,那么您应该重新考虑您的API设计。通常,最好将原始字符串存储在服务器上,并在必要时解码/编码/转义/取消它们 - 请记住,服务器数据可能会显示在浏览器以外的上下文中。如果您确实想要正确地发送服务器HTML转义字符串,那么您需要担心的不仅仅是&
,还需要担心其他特殊的HTML字符。为此,您应该使用您喜欢的库中可能提供的一些实用程序,或标准:
function htmlEscape(str) {
var div = document.createElement('div');
div.textContent = str;
return div.innerHTML;
}
答案 1 :(得分:1)
目前,为了替换&
,您需要将&
括在单词字符之外(例如:a&b
)。
这是一个JSFiddle,可以直观地解释我对您尝试使用的正则表达式的看法。
相反,只需直接定位&
:
var string = 'Sydney & Melbourne';
string = string.replace(/&/g, '&');
console.log(string);