在javascript中替换字符串中的字符

在javascript中替换字符串中的字符,javascript,regex,html-entities,Javascript,Regex,Html Entities,我正试图用&;替换《悉尼和墨尔本》中的&。 但它不起作用 我尝试了以下几种不同的方法: 使用for循环和if语句: for(var i=0; i<str.length; i++){ if(str[i]==="&"){ str[i]="&amp;"; } 我确实理解&和&是相同的东西,因此结果可能出现在as&(事实上,这是在我在这里写堆栈溢出时发生的)。但是有办法解决吗?目前,为了替换&,您需要让&被单词字符包围(例如:a&b)

我正试图用
&;替换《悉尼和墨尔本》中的
&
。 但它不起作用

我尝试了以下几种不同的方法:

  • 使用for循环和if语句:

    for(var i=0; i<str.length; i++){
        if(str[i]==="&"){
          str[i]="&amp;";
        }
    

我确实理解
&
&是相同的东西,因此结果可能出现在as
&
(事实上,这是在我在这里写堆栈溢出时发生的)。但是有办法解决吗?

目前,为了替换
&
,您需要让
&
被单词字符包围(例如:
a&b

下面是一个例子,它直观地解释了我对您试图使用的正则表达式的理解

相反,只需直接针对
&

var字符串='悉尼和墨尔本';
string=string.replace(/&/g,,&;');

console.log(字符串)当前,为了替换
&
,您需要将
&
用单词字符包围(例如:
a&b

下面是一个例子,它直观地解释了我对您试图使用的正则表达式的理解

相反,只需直接针对
&

var字符串='悉尼和墨尔本';
string=string.replace(/&/g,,&;');
console.log(字符串)您的第一次尝试
使用for循环和if语句:

for(var i=0; i<str.length; i++){
    if(str[i]==="&"){
      str[i]="&amp;";
    }
这当然行不通。空格和符号之间没有单词边界。见以下定义:

单词边界与一个单词字符后面或前面没有另一个单词字符的位置相匹配

其中“单词字符”相当于
[a-zA-Z0-9.]

但是为什么呢? 然而,真正的问题是为什么要这样做。如果只想将此字符串作为文本插入DOM,请使用
textContent

document.getElementById("city").textContent = "Sydney & Melbourne";
(而不是使用
innerHTML
)。在jQuery中,如果您碰巧使用了它,请使用
text()
而不是
html()
。这种方法的优点是不会被字符串中的其他HTML字符混淆,尤其是第一次尝试时的

使用for循环和if语句:

for(var i=0; i<str.length; i++){
    if(str[i]==="&"){
      str[i]="&amp;";
    }
这当然行不通。空格和符号之间没有单词边界。见以下定义:

单词边界与一个单词字符后面或前面没有另一个单词字符的位置相匹配

其中“单词字符”相当于
[a-zA-Z0-9.]

但是为什么呢? 然而,真正的问题是为什么要这样做。如果只想将此字符串作为文本插入DOM,请使用
textContent

document.getElementById("city").textContent = "Sydney & Melbourne";


(而不是使用
innerHTML
)。在jQuery中,如果您碰巧使用了它,请使用
text()
而不是
html()
。这种方法的优点是不会被字符串中的其他HTML字符混淆,特别是从正则表达式中删除
\b
<代码>'Sydney&Melbourne'。替换(/&/g,&;')
试过了,但没用:(谢谢!我想更正一下,它确实有用。我很好奇为什么单引号有效,但双引号无效。
替换(/&/g,&
)`不可能不起作用,不管是用双引号还是单引号。也许你的双引号意外地成为了某种“智能引号”,这本身就是破坏性的。这就是为什么更改引号似乎可以解决问题。(只是一个想法。)从正则表达式中删除
\b
'Sydney&Melbourne'。替换(/&/g,&;');
尝试过,但没有成功:(谢谢!我的观点是正确的,它确实有效。只是好奇为什么单引号有效,而双引号无效。
replace(/&/g,&;
)`不可能不起作用,不管是用双引号还是单引号。也许你的双引号是偶然的某种“智能引号”,这本身就是破坏性的。这就是为什么更改引号似乎可以解决问题。(只是一个想法。)谢谢你们两个!@kevBot-单引号有效,但双引号无效??这是为什么?@nishkaush,双引号对我很有效。你是指当你试图使用单词边界时(
\b
)?嗨,kevbot@kevbot-我起初没有/b,但后来我想可能“&”前后都有空格,所以我应该添加/b。奇怪的是,当这里的每个人都说应该添加/b时,这不起作用。如果你看到@torazaburo的答案,他会详细说明“为什么”没用。我想我应该告诉你,因为他在我之前写下了“为什么”谢谢你们两个!@kevBot-单引号起作用了,但双引号不起作用??这是为什么?@nishkaush,双引号对我来说很好。你指的是当你试图使用单词边界(
\b
)?嗨,kevbot@kevbot-我开始时没有/b,但后来我想可能“&”前后都有空格,所以我应该添加/b。奇怪的是,当这里的每个人都说应该添加空格时,它却不起作用。如果你看到@torazaburo的答案,他会详细说明“为什么”不起作用。我想我会告诉你,因为他写了“为什么”在我之前
function htmlEscape(str) {
  var div = document.createElement('div');
  div.textContent = str;
  return div.innerHTML;
}